SqlDbType.Date SQL Server 2005
Posted
技术标签:
【中文标题】SqlDbType.Date SQL Server 2005【英文标题】: 【发布时间】: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;跨度> 【参考方案1】:SQL Server 2005 不支持数据类型 DATE
,
SQL Server 2008 版本支持DATE
类型。
相反,您可以使用 datetime
或 smalldate
【讨论】:
【参考方案2】:private SqlParameter DateOfBirthSqlParameter
get
return new SqlParameter("@date", SqlDbType.DateTime)
Value = dateOfBirth.ToString("MM/dd/yyyy");
;
【讨论】:
您能否也包括对您的代码的注释,仅说明您做了什么以及为什么。 而不是使用 SqlDBtype.Date 我使用 DateTime以上是关于SqlDbType.Date SQL Server 2005的主要内容,如果未能解决你的问题,请参考以下文章
ms sql2012 能否安装在win2008 server
Sql server2008! SQL server服务无法启动,并显示错误17113, 修复Sql server2008失败!
已安装 SQL Server 2005,安装 SQL Server 2008 时提示需要删除 SQL Server 2005 Express 工具