为什么在将date.today提交到datetime列时,sql server会出现转换错误?

时间:2010-03-17 22:28:59

标签: sql-server datetime ado.net

每次尝试向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

任何想法都会非常感激。

3 个答案:

答案 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)"