问题
I am looking for the best practice, real solution, to send a Null to a SQL Server 2008 R2 database table, when a date is unknown.
I read some inputs from a formview, and a date field maybe unknown. The database allows Null values in the field but the VB to store the Null prior to a parameterized query update is not working/eludes me.
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
Any help would be greatly appreciated.
回答1:
If the date is unknown, send DbNull.Value as the parameter's 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
回答2:
It depends on the data method you are using to send the data to the server.
purDate is a variable of DateTime type and it cannot be set to null.
I suggest you use IsDate instead of testing length.
Dim purDT As Date
If Not IsDate(TextBox1.Text) Then
purDT = Nothing
Else
purDT = Convert.ToDateTime(TextBox1.Text)
End If
回答3:
You could use the Nullable(Of Date) to allow your purDT variable to also be Nothing:
Dim purDT As Nullable(Of Date) = Nothing
If tb2.Text <> "" Then
purDT = Convert.ToDateTime(tb2.Text)
End If
However, the magic happens when you define the SQL parameter that will hold this value. The parameter should either be DBNull.Value or a valid (non-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()
回答4:
Try this :
Dim purDT As Nullable(Of Date)
If tb2.Text = "" Then
purDT = DBNull.Value
Else
purDT = Convert.ToDateTime(tb2.Text)
End If
来源:https://stackoverflow.com/questions/15371727/how-to-pass-a-null-date-variable-to-sql-server-database