使用Null值更新列

时间:2011-01-24 19:21:29

标签: vb.net sql-server-2008 sqldatasource dbnull

我在表中有一个日期字段(smalldatetime),在特殊情况下我需要将date字段设置为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

似乎仍未更新该字段。没有错误返回。

3 个答案:

答案 0 :(得分:1)

改为使用SqlDateTime.Null

答案 1 :(得分:0)

尝试使用SqlDateTime.Null而不是system.dbnull.value

答案 2 :(得分:0)

我建议您使用Sql Profiler查看发送到服务器的确切内容。这应该可以帮助你缩小问题范围