我想比较一个当前日期和其他存储在数据库中的两个不同日期。
当前日期
DateTime CurrentDate = DateTime.Now;
String Date = CurrentDate.ToString("dd/MM/yyyy");
查询
String query_str = "SELECT * FROM [" + TAdvert_table + "] WHERE ([Country]='China' AND [Viewed] IS NULL) AND ([DateStart]="+Date+")";
例外:
{"Operand type clash: date is incompatible with int"}
表定义
Id int Checked
Title varchar(50) Checked
Description varchar(MAX) Checked
ImageLocation varchar(50) Checked
Country varchar(50) Checked
City varchar(50) Checked
NrInQueue varchar(50) Checked
DateStart date Checked
DateEnd date Checked
NoOfClicks int Checked
Paid varchar(50) Checked
Viewed varchar(5) Checked
答案 0 :(得分:3)
问题:
执行以下源代码后:
DateTime CurrentDate = DateTime.Now;
String Date = CurrentDate.ToString("dd/MM/yyyy");
String query_str = "SELECT * FROM [" + TAdvert_table + "] WHERE ([Country]='China' AND [Viewed] IS NULL) AND ([DateStart]="+Date+")";
query
变量可能包含此T-SQL查询:
SELECT * FROM YourTable WHERE ([Country]='China' AND [Viewed] IS NULL) AND ([DateStart]=11/05/2014)
以下表达式:11/05/2014
被视为数学表达式,并被评估为0
。在SQL Server Management Studio中尝试:
SELECT 11/05/2014 -- > 0
此表达式11/05/2014
的结果也是INT(不是DECIMAL / NUMERIC / FLOAT / REAL)。
尝试:
SELECT SQL_VARIANT_PROPERTY(11/05/2014, 'BaseType') -- > INT
这就是此谓词([DateStart]=11/05/2014)
生成错误Operand type clash: date is incompatible with int
的原因。另外,你可以尝试:
SELECT CASE WHEN CONVERT(DATE, GETDATE()) = 11/05/2014 THEN 1 ELSE 0 END
会产生相同的错误。
<强>解决方案:强>
1)您可以使用单引号(... '"+Date+"'
):
String query_str = "SELECT * FROM [" + TAdvert_table + "] WHERE ([Country]='China' AND [Viewed] IS NULL) AND ([DateStart]='"+Date+"')";
因此,生成的查询可以是:SELECT ... ([DateStart]='11/05/2014')
。这可以或不,具体取决于当前的DATEFORMAT
setting。
注意:我不会使用此解决方案。
2)为避免不同DATEFORMAT
设置导致的问题,您可以使用以下ISO 8601格式YYYY-MM-DD
:
String Date = CurrentDate.ToString("yyyy-MM-dd");
String query_str = "SELECT ... AND ([DateStart]='"+Date+"')";
注意:我不会使用此解决方案。
3)更好的方法是使用参数化查询:
SqlCommand command = new SqlCommand("SELECT ... WHERE ([Country]='China' AND [Viewed] IS NULL) AND ([DateStart]=@pDateStart)", connection);
command.Parameters.Add("@pDateStart", SqlDbType.Date);
command.Parameters["@pDateStart"].Value = CurrentDate;
注意:通过连接字符串(例如:表名)can be dangerous生成SQL查询。
答案 1 :(得分:0)
将查询结尾更改为
"([DateStart]='"+Date+"')"