【问题标题】:Syntax error (missing operator) in query expression in OleDb vb.netOleDb vb.net 中的查询表达式中的语法错误(缺少运算符)
【发布时间】:2021-10-06 13:59:49
【问题描述】:

请给我一个解决方案。

我认为我的查询代码错误

Private Sub PopulateDataGridView()
    Dim query = "select ITM,ITC,QOH,PRS FROM IFG (WHERE QOH > 0 AND ITM = @ITM OR ISNULL(@ITM, '') = '')"
    Dim constr As String = "provider=Microsoft.Jet.OLEDB.4.0; data source=C:\Users\ADMIN2\Desktop; Extended Properties=dBase IV"
    Using con As OleDbConnection = New OleDbConnection(constr)
        Using cmd As OleDbCommand = New OleDbCommand(query, con)
            cmd.Parameters.AddWithValue("@ITM", cbCountries.SelectedValue)
            Using sda As OleDbDataAdapter = New OleDbDataAdapter(cmd)
                Dim dt As DataTable = New DataTable()
                sda.Fill(dt)
                dataGridView1.DataSource = dt
            End Using
        End Using
    End Using
End Sub

Syntax error in FROM clause. contents of the database

【问题讨论】:

  • 参数数量错误仍然是错误?
  • @djv ,是的还是错误
  • @djv ,如果我省略 "or isnull" 之后的所有代码,则没有错误。
  • 那么检查是检查您从代码中传递的参数,因此您可以在代码中而不是在服务器上进行逻辑检查
  • @djv 我使用本地数据库,所以不是来自服务器。明天我将截图数据库的内容

标签: vb.net oledb


【解决方案1】:

这是一个关于 SQL 语法的问题,真的,而不是 vb.net 或 oledb。

您有两个 WHERE 子句,这是无效的 SQL。将第二个WHERE 改为AND

Dim query As String = "select ITM,ITC,QOH,PRS FROM IFG WHERE QOH > 0"
query &= " AND ITM = @ITM"

顺便说一句,由于字符串在 vb.net 中是不可变的,所以你不应该构建这样的字符串(首先分配给,然后添加到),因为每次连接都会在内存中创建一个新字符串,因此可以避免这种情况。您可以使用&、StringBuilder 或一个长字符串。例如,利用 vb.net 语法制作多行字符串,您可以将 vb.net 更改为

Dim query = "
select ITM,ITC,QOH,PRS 
FROM IFG 
WHERE QOH > 0 
AND ITM = @ITM"

这 [主观上] 作为 SQL 查询更容易阅读(当然,根据您的逻辑添加适当的括号!)。

根据您的更新,您需要向查询中添加一个参数。这是一个或多或少完整的带有一个参数的查询示例

Using con As New OleDbConnection("connection string")
    Dim query = "
        select ITM,ITC,QOH,PRS 
        FROM IFG 
        WHERE QOH > 0 
        AND ITM = @ITM"
    Using cmd As New OleDbCommand(query, con)
        cmd.Parameters.AddWithValue("@ITM", itmValue)
        Using rdr = cmd.ExecuteReader()
            For Each result In rdr.AsQueryable()
                ' do something with each result
            Next
        End Using
    End Using
End Using

【讨论】:

  • ,感谢您的回复,但有错误。如果我使用完整的代码,则错误“查询表达式中函数使用的参数数量错误”
  • @roy 查看我的编辑
  • 我添加了我的代码但还是有问题
  • @roy 你需要更具体
  • 我已经更新了我的具体代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-02
  • 2018-01-29
  • 2012-11-14
相关资源
最近更新 更多