【问题标题】:SQL Server 2008 stored procedure with DateTime2带有 DateTime2 的 SQL Server 2008 存储过程
【发布时间】:2011-08-19 08:40:10
【问题描述】:

我有一个关于 SQL Server 2008 中的存储过程和 DateTime2 数据类型的小问题。

我有几个使用 DateTime2 数据类型的存储过程,我想插入日期 0001.01.01 00:00:00,但这不适用于 VB.net,我找不到原因。

我使用这个代码片段:

Dim sqlStatement As New SqlClient.SqlCommand
Dim sqlTransaction As SqlClient.SqlTransaction
sqlStatement.CommandType = CommandType.StoredProcedure
sqlStatement.CommandText = "SCHEMA.spInsertDate"
sqlStatement.Parameters.AddWithValue("@Date", "0001.01.01 00:00:00")
sqlStatement.ExecuteNonQuery()

从我的程序中调用存储过程(存储过程是一个简单的INSERT 语句,仅适用于实际日期)。但是当我输入日期0001.01.01 00:00:00 时,总是会出现错误,当我想执行存储过程时,我无法在“01.01.1753”之前插入日期。

现在我已经知道 SQL Server 中的 DateTime2 数据类型应该支持这一点。

所以我的问题是,这可能是驱动程序问题,更新 SQLClient 可以解决这个问题,或者这是一个普遍问题,我终于可以停止搜索,只使用 1753.01.01。

谢谢林

【问题讨论】:

    标签: vb.net sql-server-2008 datetime2


    【解决方案1】:

    如果您没有为 SQL 参数指定任何内容并使用 .AddWithValue() 方法,我相信 ADO.NET 将默认使用 SqlDbType.DateTime 在其范围内有此限制(1753 年 1 月 1 日之前没有日期)。

    您需要通过此调用明确定义参数的数据类型:

    SqlParameter dateTime2Param = sqlStatement.Parameters.Add("@Date", SqlDbType.DateTime2);
    dateTime2Param.Value = "0001.01.01 00:00:00";
    

    那么它应该可以工作,我相信。 SqlDbType 枚举在 .NET 3.5 中添加了这个 DateTime2 类型

    【讨论】:

    • @Lim:是的,.AddWithValue() 很方便 - 但有时有点危险,因为从一开始就并不总是很明显,SqlDbType 会为您提供的价值选择。我更喜欢总是明确地告诉参数SqlDbType它是什么 - (令人讨厌的)惊喜的可能性较小......
    • 我明白你的意思了,这是我第一次真正遇到 .AddWithValue() 函数的问题。我会在以后的计划中记住这一点:)非常感谢您澄清这一点:)
    猜你喜欢
    • 2015-01-26
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    相关资源
    最近更新 更多