2

DateTime2SQL Server 2008のストアド プロシージャとデータ型についてちょっとした質問があります。

データ型を使用していくつかのストアド プロシージャを取得し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」より前に日付を挿入できないというエラーが常に表示されます。

DateTime2これで、SQL Serverのデータ型がこれをサポートする必要があることがわかりました。

したがって、私の質問は、これがドライバーの問題であり、SQLClient を更新することでこれが解決される可能性があるか、またはこれが一般的な問題であり、最終的に検索を停止して 1753.01.01 を使用できるかということです。

ありがとうリム

4

1 に答える 1

6

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列挙にはDateTime2、.NET 3.5 でこの型が追加されました。

于 2011-08-19T08:44:14.087 に答える