7

Null日付が不明な場合に、SQL Server 2008 R2 データベース テーブルに送信するためのベスト プラクティス、実際の解決策を探しています。

フォームビューからいくつかの入力を読み取りましたが、日付フィールドが不明である可能性があります。データベースはフィールドに Null 値を許可しますが、パラメータ化されたクエリの更新の前に VB が Null を格納することはできません。

    Dim tb2 As TextBox = TryCast(FormView1.FindControl("tbPurchDate"), TextBox)
    Dim purDT As Date
    If tb2.Text = "" Then
        IsDBNull(purDT)    ' Tried this along with other possible code
    Else
        purDT = Convert.ToDateTime(tb2.Text)
    End If

どんな助けでも大歓迎です。

4

4 に答える 4

12

日付が不明な場合はDbNull.Value、パラメータの値として送信します。

If dateIsUnknown Then
    cmd.Parameters.Add(New SqlParameter _
                       With {.ParameterName = "@purDT", _
                             .SqlDbType = SqlDbType.Date, _
                             .Value = DBNull.Value})
Else
    cmd.Parameters.Add(New SqlParameter _
                       With {.ParameterName = "@purDT", _
                             .SqlDbType = SqlDbType.Date, _
                             .Value = theDateVariable})
End If
于 2013-03-12T22:27:33.660 に答える
1

を使用しNullable(Of Date)て、purDT変数を にすることもできますNothing

Dim purDT As Nullable(Of Date) = Nothing

If tb2.Text <> "" Then
    purDT = Convert.ToDateTime(tb2.Text)
End If

ただし、この値を保持する SQL パラメータを定義すると、魔法が起こります。パラメータは、DBNull.Valueまたは有効な (null 以外) のいずれかである必要がありDateます。

' initialize connection, command...

Dim param = New SqlParameter()
param.ParameterName = "NullableDate"
param.Value = IIf(purDT Is Nothing, DBNull.Value, purDT)

cmd.Parameters.Add(param)
cmd.ExecuteNonQuery()
于 2013-03-12T20:58:38.543 に答える
1

これは、データをサーバーに送信するために使用しているデータ メソッドによって異なります。

purDate は DateTime 型の変数であり、null に設定することはできません。

長さをテストする代わりに IsDate を使用することをお勧めします。

    Dim purDT As Date
    If Not IsDate(TextBox1.Text) Then
        purDT = Nothing
    Else
        purDT = Convert.ToDateTime(TextBox1.Text)
    End If
于 2013-03-12T21:03:04.083 に答える
-1

これを試して :

Dim purDT As Nullable(Of Date)

If tb2.Text = "" Then
    purDT = DBNull.Value
Else
    purDT = Convert.ToDateTime(tb2.Text)
End If
于 2013-03-12T20:52:11.483 に答える