错误:'操作数类型冲突:日期与日期类型的int'不兼容

时间:2014-02-05 10:04:13

标签: c# sql-server

我在SQL Server中有一个date数据类型列的表。

我想选择包含ExpireDate >= Datetime.Now

的记录

我使用存储过程。

ALTER PROCEDURE [dbo].[Ad_SelectByCommand]
@Where varchar(max),
@SQLSort varchar(max)
AS
DECLARE @query varchar(max);

    IF @Where <> N'' SET @Where = N' WHERE ' + @Where
    IF @SQLSort <> N'' SET @SQLSort = N' ORDER BY ' + @SQLSort

SET @query = 'SELECT [Id], [Name], [Description], [Image], [ExpireDate], [Cost], [IsPayment] FROM [dbo].[Ad]' + @Where + @SQLSort

EXEC(@query)

并在C#中使用它:

var list = clsAdFactory.GetAllByCommand("ExpireDate>=" + DateTime.Now.ToShortDateString());

var list = clsAdFactory.GetAllByCommand("ExpireDate>=" + DateTime.Now.ToString("dd/MM/yyyy"));

但我收到错误

  

操作数类型冲突:日期与int

不兼容

2 个答案:

答案 0 :(得分:4)

用引号括起日期:

string whereClause = string.Format(@"ExpireDate >= '{0}'", DateTime.Now.ToShortDateString());
var list = clsAdFactory.GetAllByCommand(whereClause);

答案 1 :(得分:1)

请改为尝试:

var list = clsAdFactory.GetAllByCommand("ExpireDate>='" + DateTime.Now.ToShortDateString()) + "'";

你最终的SQL是这样的:

WHERE ExpireDate>=20140101

什么时候应该更像这样:

WHERE ExpireDate>='20140101'

您甚至可能需要一些额外的单引号来保持高兴:

var list = clsAdFactory.GetAllByCommand("ExpireDate>=''" + DateTime.Now.ToShortDateString()) + "''";
相关问题