C# 动态WHERE子句';缺少关键字';带撇号
我正在从下面的DropDownList动态生成一个WHERE子句。无论我是否手动添加撇号,我都会得到一个ORA-00905缺少的关键字(参见注释)。直接在数据库上运行脚本将返回行C# 动态WHERE子句';缺少关键字';带撇号,c#,.net,oracle,C#,.net,Oracle,我正在从下面的DropDownList动态生成一个WHERE子句。无论我是否手动添加撇号,我都会得到一个ORA-00905缺少的关键字(参见注释)。直接在数据库上运行脚本将返回行 <asp:DropDownList ID="callsInHour" runat="server" AutoPostBack="True"> <asp:ListItem Value="1">1</asp:ListItem> <asp:ListIt
<asp:DropDownList ID="callsInHour" runat="server" AutoPostBack="True">
<asp:ListItem Value="1">1</asp:ListItem>
<asp:ListItem Value="4">4</asp:ListItem>
<asp:ListItem Value="8">8</asp:ListItem>
<asp:ListItem Value="12">12</asp:ListItem>
<asp:ListItem Value="24">24</asp:ListItem>
</asp:DropDownList>
删除整个WHERE子句也会返回行,所以这肯定是问题所在。对数据库运行跟踪时,似乎:zcallz是在没有值的情况下传递的。有趣的是,我有一个非常相似的代码集正在运行,但是使用了通配符,而且它可以工作
string eventName = "%" + ddlEvents.SelectedItem.Text + "%";
真让我抓狂。感谢间隔需要一个字符串,并且对铸造和参数有点挑剔 作为一种解决办法,这应该做到:
... BETWEEN SYSDATE - (interval '1' hour * :zcallz) AND ...
INTERVAL:zcallz HOUR
的问题在于它是一个,即必须使用常量整数,而不是变量
要定义动态间隔值,请使用间隔函数
所以不是
SYSDATE - INTERVAL :zcallz HOUR
使用
您是否尝试添加新的OracleParameter(“:zcallz”,…)-包括
:
?执行的完整查询是什么?@StephanBauer尝试了:
,但运气不佳。也许您可以使用Interval Day to Second
而不是Interval Hour
,并将TimeSpan
作为参数传递。请参见而不是SYSDATE-INTERVAL:zcallz HOUR
使用SYSDATE-NUMTODSINTERVAL(:zcallz,'HOUR')
。我想还有更多。
SYSDATE - INTERVAL :zcallz HOUR
sysdate - NUMTODSINTERVAL(:zcallz, 'HOUR')