查询表达式中缺少运算符?

时间:2016-02-25 11:11:12

标签: sql .net vb.net syntax-error

此代码给出了语法错误。

DataGridView1.DataSource = ""
dAdapt = New OleDb.OleDbDataAdapter("select CustName, CustMobileNo, SMSDate, OilChangeStatus from invoiceHeader_tb where SMSDate =" & DTPDueDate.Value & " order by SMSDate", con)
Dim dt As New DataTable
dAdapt.Fill(dt)
Me.DataGridView1.DataSource = dt
Me.DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect
Me.DataGridView1.ReadOnly = True
con.Close()

错误:

  

查询表达式中的语法错误(缺少运算符)' SMSDate   = 25-Feb-16 4:05 PM'

3 个答案:

答案 0 :(得分:1)

在此处添加单引号

SMSDate = '" & DTPDueDate.Value & "'

所以它会像这样

dAdapt = New OleDb.OleDbDataAdapter("select CustName, CustMobileNo, SMSDate, OilChangeStatus from invoiceHeader_tb where SMSDate ='" & DTPDueDate.Value & "' order by SMSDate", con)

答案 1 :(得分:0)

您在约会时间内缺少撇号(单引号)。

where SMSDate ='" & DTPDueDate.Value & "' order

答案 2 :(得分:0)

您的原始SQL缺少日期值附近的单引号,但仍可能无法修复错误,因为数据库可能期望某种格式的日期。

您尚未指定正在使用的数据库,但大多数人希望以“yyy-MM-dd”格式指定日期

此外,执行sql的方式也会让您对SQL Injection漏洞开放,因此您应该使用参数化查询正确执行此操作:

例如:

Public Function GetBarFooByBaz(ByVal Baz As String) As String
    Dim sql As String = "SELECT foo FROM bar WHERE baz= @Baz"

    Using cn As New SqlConnection("Your connection string here"), _
        cmd As New SqlCommand(sql, cn)

        cmd.Parameters.AddWithValue("@Baz", Baz)
        Return cmd.ExecuteScalar().ToString()
    End Using
End Function

此答案的参考:How do I create a parameterized SQL query? Why Should I?

这样做意味着您不必以特定格式设置日期,也无需记住是否需要围绕某个值的引号。