我有这样的财产:
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
. 但为什么它之前没有打破它?