【发布时间】:2012-08-25 11:31:57
【问题描述】:
我有这样的财产:
private SqlParameter DateOfBirthSqlParameter
{
get
{
return new SqlParameter("@date", SqlDbType.Date)
{
Value = dateOfBirth.ToString("MM/dd/yyyy");
};
}
}
dateOfBirth 是 DataTime C# 类型。我使用此参数添加到我的 SQL 命令中,如下所示。
Select * From mytable Where dob_dt = @date
问题是在 SQL Server 2005 中不起作用。我遇到了一个异常:
System.ArgumentException:正在使用的 SQL Server 版本不 支持数据类型“日期”
这是因为 SQL Server 2005 不支持Date,这是更高版本(SQL Server 2008)的功能。
对此有很多解决方案,例如将SqlDbType.Date更改为SqlDbType.DateTime
我猜参考System.Data 是一个提供SQL Server 2008 支持的所有功能的版本。我应该将其更改为仅支持2005 的版本吗?这将有助于发现其他可能的不匹配?处理这种情况的最佳方法是什么?
谢谢。
更新:2012 年 8 月 31 日
在示例中,我使用了出生日期,但在我的应用程序中,我使用了其他东西,例如 purchase_dt 或类似的东西(上面有时间)。我的第一个 Select 语句是:
Select * From mytable Where Cast(purchase_dt as Date) = @date
这在我的装有 SQL Server 2008 的电脑上很好,在另一台装有 SQL Server 2005 的电脑上也很好,只是在选择时抛出异常.
但是,一旦我解决了这个问题,使用:
Select * From mytable Where Cast(DATEDIFF(dd, 0, purchase_dt) as DateTime) = @date
这破坏了整个 Web 应用程序(在另一台 PC 中)...问题是 SqlDbType.Date。但是为什么之前没有破解呢?
【问题讨论】:
-
由于您的数据库模型指定了 DateTime(或者它不会在 2005 年编译),因此只需使用您已经推测的 SqlbType.DateTime。
-
只使用 DateTime,因为它是 Sql Server 2005 支持的。另外,将 select 语句更改如下“SELECT * FROM myTable WHERE DATEDIFF(DD, purchase_dt, @date) = 0;跨度>
标签: sql sql-server-2008 sql-server-2005 sqlclient sqldbtype