请输入专案类型(网站专案或者应用程式专案):
网站专案
我用grid view捞oracle数据库,
有两个字段:开始日期与结束日期
设定条件是如果这两个日期都有指定,
就捞出开始日期大于等于指定日期1,
结束日期小于等于指定日期2的资料
为了好读与安全我使用string builder与parameters去分析变量
但是试了很多种写法只有单纯用字串凑出SQL的方式能捞出资料
可是同样的sql在sql developer里面都能够捞出资料
逻辑上应该是对的
首先:
StringBuilder sbStringSql = new StringBuilder();
sbStringSql.Append("select A.ID,B.NAME,A.STARTDATE,A.ENDDATE FROM A,B");
sbStringSql.Append("WHERE 1=1 AND A.ID=B.ID");
然后以下是可以捞回来的的写法,单纯用字串组,用大于跟小于写区间
sbStringSql.Append(
" and ((to_char(A.STARTDATE,'yyyy-mm-dd')) >='" + strSTARTDATE + "'");
sbStringSql.Append(" and (to_char(A.ENDDATE,'yyyy-mm-dd')) <='"
+ strENDDATE + "')");
不行的写法,大于跟小于的写法用变量不行
sbStringSql.Append(" and ((to_char(A.STARTDATE,'yyyy-mm-dd')) >=:STARTDATE");
sbStringSql.Append(" and (to_char(A.ENDDATE,'yyyy-mm-dd')) <=:ENDDATE)");
if (strSTARTDATE != string.Empty)
{
da.SelectCommand.Parameters.Add(
new OracleParameter("STARTDATE",strSTARTDATE));
}
if (strENDDATE != string.Empty)
{
da.SelectCommand.Parameters.Add(
new OracleParameter("ENDDATE", strENDDATE));
}
另外BETWEEN的写法用变量跟字串组都不行
变量就是跟上面一样用PARAMETER去解
字串就是把日期那边直接带入text box的text
不知道是SQL写法问题还是程式问题,想来求救一下