每次尝试向sql server提交日期值时,我都会收到转换错误。 sql server中的列是一个日期时间,在vb中,我使用Date.today传递给我的参数化查询。我一直得到一个sql异常
从字符串转换日期时转换失败。
这是代码
Public Sub ResetOrder(ByVal connectionString As String)
Dim strSQL As String
Dim cn As New SqlConnection(connectionString)
cn.Open()
strSQL = "DELETE Tasks WHERE ProjID = @ProjectID"
Dim cmd As New SqlCommand(strSQL, cn)
cmd.Parameters.AddWithValue("ProjectID", 5)
cmd.ExecuteNonQuery()
strSQL = "INSERT INTO Tasks (ProjID, DueDate, TaskName) VALUES " & _
" (@ProjID, @TaskName, @DueDate)"
Dim cmd2 As New SqlCommand(strSQL, cn)
cmd2.CommandText = strSQL
cmd2.Parameters.AddWithValue("ProjID", 5)
cmd2.Parameters.AddWithValue("DueDate", Date.Today)
cmd2.Parameters.AddWithValue("TaskName", "bob")
cmd2.ExecuteNonQuery()
cn.Close()
DataGridView1.DataSource = ds.Projects
DataGridView2.DataSource = ds.Tasks
End Sub
任何想法都会非常感激。
答案 0 :(得分:3)
尝试
DateTime.Now()
或者
DateTime.Today;
而不是
Date.Today
答案 1 :(得分:1)
您的应用程序和SQL服务器之间可能存在不同区域设置的问题。
虽然它无法解决根本问题,但要避免这种情况的直接方法是明确格式化传递给SQL的日期
cmd2.Parameters.AddWithValue("DueDate", DateTime.Today.ToString("yyyyMMdd"));
修改强> 我更仔细地阅读了您的代码:您已经按照不同的顺序获得了参数和值。尝试:
strSQL = "INSERT INTO Tasks (ProjID, DueDate, TaskName) VALUES " & _
" (@ProjID, @DueDate, @TaskName)"
答案 2 :(得分:0)
参数的顺序错误。卫生署!
@TaskName和@DueDate被交换了。我相信以上所有建议都是正确的。
strSQL = "INSERT INTO Tasks (ProjID, DueDate, TaskName) VALUES " & _ " (@ProjID, @TaskName, @DueDate)"