我试图将VB.Net中的Windows窗体中的DateTimePicker中的日期插入到SQL字符串中,以便将其识别为日期时间(字段本身在SQL Server中设置为日期时间).
我已经尝试了一些方法(Convert在SQL级别,Format在VB.Net级别)并且现在使用存储为的变量DateTime,但是我仍然无法使其工作.我的代码片段如下:
Using sqlConn = New SqlConnection(My.Settings.sqlString)
sqlConn.Open()
Dim dte As DateTime = Convert.ToDateTime(Me.dateMain.Text)
Dim cmd As SqlCommand
cmd = sqlConn.CreateCommand
cmd.CommandText = "Update Table1 " &
"SET Person='" & Me.person.Text & "'," &
"Date='" & dte & "' " &
"WHERE (Code = '" & PCode & "')"
cmd.ExecuteNonQuery()
cmd = Nothing
End Using
Run Code Online (Sandbox Code Playgroud)
编辑:以下错误(或轻微变化)是我几乎所有尝试过的尝试.在下面提交参数化答案后收到此错误
System.Data.dll中发生了类型为"System.Data.SqlClient.SqlException"的未处理异常
附加信息:将char数据类型转换为日期时间数据类型会导致日期时间值超出范围.
所以看起来即便如此,它还没有将它识别为SQL中的日期时间.我想我需要Convert在SQL字符串中再试一次,但我对函数的了解是有限的.任何人都知道如何使用它来实现这一点(如果这是解决方案)?
听起来像参数化的工作!
Using sqlConn = New SqlConnection(My.Settings.sqlString)
sqlConn.Open()
Dim cmd As SqlCommand
cmd = sqlConn.CreateCommand
cmd.CommandText = "Update Table1 " &
"SET Person = @person, " &
"Date = @dte " &
"WHERE (Code = @code)"
cmd.Parameters.AddWithValue("@person", Me.person.Text)
cmd.Parameters.AddWithValue("@dte", Me.dateMain.Value)
cmd.Parameters.AddWithValue("@code", PCode)
cmd.ExecuteNonQuery()
cmd = Nothing
End Using
Run Code Online (Sandbox Code Playgroud)
当你在这里时,我不想改变太多,因为我从来没有在我的生活中写过一行VB(所以这也可能是也可能不对,如果不编译就告诉我或其他东西,但这是要点),但SqlCommand确实实现了IDisposable,所以你应该将它包装在一个Using中.
参数化您的查询将消除您遇到的错误,促进代码重用,并且可以说最重要的是,停止SQL注入攻击.请始终使用参数,我们所有的清酒.
| 归档时间: |
|
| 查看次数: |
1605 次 |
| 最近记录: |