【发布时间】:2015-03-01 15:17:07
【问题描述】:
在这件事上我真的需要你的帮助。我已经搜索了许多关于此的类似主题,但找不到适合我的程序的主题。我会尽量简化我的问题并排除与我无关的其他细节。
我的 vb 程序有一个名为 dtpDate 的日期时间选择器,两个名为 btnRecord_Save 和 btnClear_Date 的按钮。
我的 sql 有一个名为 Voucher 的表和一个名为 Voucher_Date (Datatype = Date) 的表
当我的 dtpdate 有一个日期值时,我没有问题,因为它工作得很好,但是如果我通过按 btnClear_date 清除 dtpdate 上的日期,它会给我一个错误(如上面的标题所述)。我想要的只是如果 dtpDate 为空,它将在我的 sql 中存储“NULL”值(列名 = Voucher_date)。
这是我的代码供您参考,我已经编辑并排除了不必要的信息。
类代码(SQLControl)
Imports System.Data.Sql
Imports System.Data.SqlClient
Public Class SQLControl
Public SQLCon As New SqlConnection With {.ConnectionString i got this!!!}
Public SQLDA As SqlDataAdapter
Public SQLDS As DataSet
Public Params As New List(Of SqlParameter)
Public RecordCount As Integer
Public Exception As String
Private SQLCmd As SqlCommand
Public Sub AddToVoucher(Voucher_Date As Date)
Try
Dim strInsert As String = "INSERT INTO Voucher (Voucher_Date) " & _
"VALUES (" & _
"'" & Voucher_Date & "') "
SQLCon.Open()
SQLCmd = New SqlCommand(strInsert, SQLCon)
SQLCmd.ExecuteNonQuery()
SQLCon.Close()
MsgBox("Successfully Added Into Records!")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class
Public Class FormMain
Dim sql As New SQLControl
Private Sub dtpDate_ValueChanged(sender As System.Object, e As System.EventArgs) Handles dtpDate.ValueChanged
dtpDate.CustomFormat = "dd/MM/yyyy"
End Sub
Private Sub btnClearDate_Click(sender As System.Object, e As System.EventArgs) Handles btnClearDate.Click
dtpDate.CustomFormat = " "
dtpDate.Format = DateTimePickerFormat.Custom
End Sub
Private Sub btnRecord_Save_Click(sender As System.Object, e As System.EventArgs) Handles btnRecord_Save.Click
sql.AddToVoucher(dtpDate.Text)
End Sub
End Class
【问题讨论】:
-
使用 SQL 参数而不是将字符串粘合在一起。如果
Voucher_Date是一个实际的日期类型列,则向它发送一个日期时间类型。不需要“格式化”,因为 DateTime 类型没有格式。如果Voucher_Date不是 Date 类型,它应该是 -
错误信息非常清楚:无法将字符串转换为日期。所以你需要在创建sql查询时废弃旧的字符串连接,开始使用parameterized sql queries。
-
..另外,A DateTimePicker 总是有一个值,所以它们永远不会“空白”。虽然在 CodeProject 中有一个 Nullable DTP
-
正如这些 cmets 所得出的结论,DTP 始终有一个值,它不能设为 NULL。所以我更喜欢做一些代码 在你的保存按钮单击中工作(如 if 语句)并在命令本身中指定 Null .
-
也请参考这篇之前的帖子。你可能会找到一些东西。setting a DTP to Null
标签: vb.net string date sqldatatypes