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");
            ;
    

dateOfBirthDataTime 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 类型。 相反,您可以使用 datetimesmalldate

【讨论】:

【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章

sql server安装遇到的问题

ms sql2012 能否安装在win2008 server

Sql server2008! SQL server服务无法启动,并显示错误17113, 修复Sql server2008失败!

sql server 的考证问题

求sql server帮助文档

已安装 SQL Server 2005,安装 SQL Server 2008 时提示需要删除 SQL Server 2005 Express 工具