1

パラメータクエリを使用するinsertRecord関数がvb.netにあります。エラーの日付が指定されていない場合は、 ""(Nothing)の代わりにdbnull.valueをdbに挿入する必要があります。

Dim strErrorDate2 As DateTime = Request.Form("dateOfErrorDatePicker2").ToString

.Add(New SqlParameter("@ErrorDate2", If(strErrorDate2 <> Nothing, strErrorDate2.Date, DBNull.Value)))

dbnullからstringへの変換エラーが発生し続けます。元々、変数を初期化した独自のif / elseブロックがありましたが、正しく変換する方法がわかりませんでした。インラインを試しましたが、それでも変換を行うか、別のことを試す必要があります。

何か案は?問題は、空の文字列またはDateTimeをデータベースに挿入すると、1/1/1900などの可能な最小の日付として記録されることです。

編集:「一般的なタイプを推測することはできません。「オブジェクト」が想定されます。」それは私が現在得ているエラーです。

4

2 に答える 2

0

これは、SQLServer側にあるためにほぼ確実に発生しています。Nullを最小の日付に置き換えているストアドプロシージャを呼び出している可能性が非常に高いか、または(より可能性が高い)挿入先のテーブルに最小の日付を割り当てているトリガーまたはデフォルトの列値がある可能性がありますNullの場合。


明確にするために:まず、NothingをDBNullに変換することを心配する必要はありません。ADO.netがそれを実行する必要があります。

次に、SQL Server Nothing / Nullを送信し、それが他の何かを格納している場合、それはそれ(テーブルまたはストアドプロシージャ)がNULLをデフォルト値に置き換えているためです。これは、データ設計で、挿入しようとしている列にNULLを含めたくないためと考えられます。

于 2012-12-13T17:46:35.690 に答える
0

これは、strErrorDate2.DateがDateTimeであり、System.DbNull.Valueがオブジェクトであるためです。strErrorDate2をIF()のオブジェクトに直接キャストするか、次のようにします

Dim oErrorDate2 as Object = System.DbNull.Value

If strErrorDate2 <> Nothing Then oErrorDate = strErrorDate2

.Add(New SqlParameter("@ErrorDate2",oErrorDate2))
于 2012-12-13T18:28:03.293 に答える