代码之家  ›  专栏  ›  技术社区  ›  kpierce8

为什么SQL Server在将date.today提交到datetime列时给出转换错误?

  •  0
  • kpierce8  · 技术社区  · 14 年前

    每次尝试向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 回复  |  直到 14 年前
        1
  •  3
  •   Dustin Laine    14 年前

    尝试

    DateTime.Now()
    

    DateTime.Today;
    

    而不是

    Date.Today
    
        2
  •  1
  •   kristian    14 年前

    应用程序和SQL Server之间的不同区域设置可能存在问题。

    尽管它不能解决底层问题,但直接避免这种情况的方法是显式格式化传递给SQL的日期。

    cmd2.Parameters.AddWithValue("DueDate", DateTime.Today.ToString("yyyyMMdd"));
    

    编辑: 我更仔细地阅读了您的代码:您的参数和值的顺序不同。尝试:

    strSQL = "INSERT INTO Tasks (ProjID, DueDate, TaskName) VALUES " & _
    " (@ProjID, @DueDate, @TaskName)"
    
        3
  •  0
  •   kpierce8    14 年前

    参数顺序错误。啊!

    @已交换taskname和@duedate。我相信上述所有建议都是正确的。

    strSQL = "INSERT INTO Tasks (ProjID, DueDate, TaskName) VALUES " & _         " (@ProjID, @TaskName, @DueDate)"