作者ian90911 (ianchu)
看板Visual_Basic
标题[.NET] oracle 日期区间问题
时间Sat Mar 22 01:21:23 2014
请输入专案类型(网站专案或者应用程式专案):
网站专案
我用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写法问题还是程式问题,想来求救一下
--
1F:推 mraaa:你的变数没有设type所以预设字串!那你str的格式有照yyyy-mm 03/23 00:55
2F:→ mraaa:-dd吗? 03/23 00:55
问题解决了
为什麽逻辑对了、sql丢到developer也能过,程式还是捞不回来资料呢
原来是parameter去append来替换变数
必须要按照顺序去append才可以...
※ 编辑: ian90911 来自: 182.235.186.208 (03/26 21:10)