2013-03-12 27 views
7

Tôi đang tìm giải pháp thực tế tốt nhất, giải pháp thực, để gửi Null tới bảng cơ sở dữ liệu SQL Server 2008 R2, khi một ngày không xác định.Làm thế nào để vượt qua một biến ngày Null để cơ sở dữ liệu SQL Server

Tôi đọc một số yếu tố đầu vào từ một lần xem trang và một trường ngày có thể không xác định. Cơ sở dữ liệu cho phép các giá trị Null trong trường nhưng VB để lưu trữ Null trước khi cập nhật truy vấn tham số không hoạt động/eludes tôi.

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 

Mọi trợ giúp sẽ được đánh giá cao.

+0

Nếu bạn có ý nghĩa này, tôi đã cố gắng nó .... purDT Dim Như Nullable (Tất DateTime) – htm11h

+0

Oh, tuyệt đối , Tôi nghĩ rằng tôi đã nói rằng trong OP là tốt. – htm11h

+0

OK. Bỏ lỡ điều đó. –

Trả lời

12

Nếu ngày là không rõ, gửi DbNull.Value như giá trị của tham số:

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 
+0

Mortan, Công trình, sạch sẽ, định dạng nằm ngoài quy ước của tôi nhưng tôi có thể sống với điều đó và nó hoạt động tuyệt vời. Cảm ơn nhiều!!! – htm11h

+0

@ marc11h Bạn được chào đón :) Tôi sẽ không bình thường định dạng nó như thế, hoặc, nhưng nó đã phù hợp với chiều rộng có sẵn. –

-1

Hãy thử điều này:

Dim purDT As Nullable(Of Date) 

If tb2.Text = "" Then 
    purDT = DBNull.Value 
Else 
    purDT = Convert.ToDateTime(tb2.Text) 
End If 
+0

đã thử nó không thể chỉ định DBNUll.value để ..... Dim purDT Như ngày – htm11h

+0

Hãy thử một 'Nullable' sau đó: xem chỉnh sửa của tôi. – SolarBear

1

Bạn có thể sử dụng Nullable(Of Date) cho phép biến purDT của bạn để cũng được Nothing:

Dim purDT As Nullable(Of Date) = Nothing 

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

Tuy nhiên, sự kỳ diệu sẽ xảy ra khi bạn xác định các tham số SQL sẽ giữ giá trị này. Các tham số hoặc nên DBNull.Value hoặc một hợp lệ (không 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() 
1

Nó phụ thuộc vào phương pháp dữ liệu bạn đang sử dụng để gửi dữ liệu đến máy chủ.

purDate là biến của loại DateTime và không thể đặt thành giá trị rỗng.

Tôi đề nghị bạn sử dụng IsDate thay vì kiểm tra độ dài.

Dim purDT As Date 
    If Not IsDate(TextBox1.Text) Then 
     purDT = Nothing 
    Else 
     purDT = Convert.ToDateTime(TextBox1.Text) 
    End If 
+0

Upvote cho IsDate, – htm11h

Các vấn đề liên quan