-3

错误说:

查询表达式 '((Student Number = ?) AND ((? = 1 AND Name IS NULL) OR (Name = ?))) 中的语法错误(缺少运算符)

代码是:

Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click

    Dim cb As New OleDb.OleDbCommandBuilder(da)
    ds.Tables("BSorg Members").Rows(inc).Item(1) = tbStudentNumber.Text()
    ds.Tables("BSorg Members").Rows(inc).Item(1) = tbName.Text()

    da.Update(ds, "BSorg Members")
  MsgBox("Data updated")
End Sub

其中 tbStudentNumber.Text() 在访问时显示数据“学生编号”并显示“姓名”。

这是什么意思,我该如何解决?

4

2 回答 2

1

从错误消息看来,您正在尝试将字段名称作为参数传递给查询。如果是这样,那就行不通了。查询参数仅适用于字段(列),不适用于字段名称

为了说明,以下 C# 代码将不起作用

using (var con = new OleDbConnection(
            "Provider=Microsoft.ACE.OLEDB.12.0;" +
            @"Data Source=C:\__tmp\main.accdb;"))
{
    con.Open();
    using (var cmd = new OleDbCommand(
                "SELECT COUNT(*) AS n FROM Table1 WHERE ? = 1", con))
    {
        cmd.Parameters.AddWithValue("?", "ID");
        int n = (int)cmd.ExecuteScalar();
        Console.WriteLine(n.ToString());
    }
    con.Close();
}

在这种情况下,它失败了

标准表达式中的数据类型不匹配

但是,此代码工作正常

using (var con = new OleDbConnection(
            "Provider=Microsoft.ACE.OLEDB.12.0;" +
            @"Data Source=C:\__tmp\main.accdb;"))
{
    con.Open();
    using (var cmd = new OleDbCommand(
                "SELECT COUNT(*) AS n FROM Table1 WHERE ID = 1", con))
    {
        //cmd.Parameters.AddWithValue("?", "ID");
        int n = (int)cmd.ExecuteScalar();
        Console.WriteLine(n.ToString());
    }
    con.Close();
}
于 2013-06-07T11:29:44.533 回答
0

也许你错过了这个

ds.Tables("BSorg Members").Rows(inc).Item(0) = tbStudentNumber.Text
ds.Tables("BSorg Members").Rows(inc).Item(1) = tbName.Text
于 2013-06-07T11:10:11.290 回答