2

テーブルに日付フィールド(smalldatetime)があり、特定の場合、日付フィールドをnullに設定する必要があります。現在、sqlparameter.valueプロパティを日付に設定する場合

endDateParam.Value = "5/15/2011"

フィールドは適切な日付で更新されます。ただし、

endDateParam.Value = System.DbNull.Value

フィールドを更新しません。

背後にあるコード:

Protected Sub ...
    For Each r As GridViewRow In gvEmployees.Rows
        SqlDataSource1.UpdateCommand = "<stored proc>"
        SqlDataSource1.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure
        setParameters(r)
        gvEmployees.UpdateRow(r.RowIndex, False)
    Next
End Sub

Private updateParameters As New List(Of SqlParameter)()

Protected Sub setParameters(ByVal r As GridViewRow)
    updateParameters.Clear()

    Dim endDate As TextBox = TryCast(r.FindControl("txtEndDate"), TextBox)

    Dim endDateParam As New SqlParameter("@enddate", SqlDbType.SmallDateTime)
    endDateParam.Direction = ParameterDirection.Input
    endDateParam.Value = System.DBNull.Value
    updateParameters.Add(endDateParam)
End Sub

Protected Sub Sqldatasource1_Updating(ByVal source As Object, ByVal e As SqlDataSourceCommandEventArgs)
    e.Command.Parameters.Clear()
    For Each p As SqlParameter In updateParameters
        e.Command.Parameters.Add(p)
    Next
End Sub

アップデート

endDateParam.Value = System.Data.SqlTypes.SqlDateTime.Null

まだフィールドを更新していないようです。エラーは返されません。

4

3 に答える 3

1

代わりにSqlDateTime.Nullを使用してください。

于 2011-01-24T19:33:28.117 に答える
0

system.dbnull.valueの代わりにSqlDateTime.Nullを試してください

于 2011-01-24T19:33:18.687 に答える
0

Sql Profiler を使用して、サーバーに何が送信されているかを正確に確認することをお勧めします。それはあなたが問題を絞り込むのに役立つはずです

于 2011-01-24T22:30:29.157 に答える