【问题标题】:Error parsing query: [ Token line number = 1,Token line offset = 27,Token in error = BY ]解析查询出错:[Token line number = 1,Token line offset = 27,Token in error = BY]
【发布时间】:2021-01-14 02:10:10
【问题描述】:

我正在尝试传递一个 SQL 命令来删除具有 BY 属性(唯一 nvarchar)的数据,但我每次都会收到此解析错误。

解析查询出错:[Token line number = 1,Token line offset = 27,Token in error = BY]

我还尝试对另一个名为 Category 的属性执行相同的命令(它也是 nvarchar,但不是唯一的,不是键),命令通过并​​且包含输入字符串的行确实被删除。我在想是否可能是因为我将 BY 设置为 Unique、No NULL、KEY.. 或者其他什么。这是我执行命令的按钮的简单代码。

    public SqlCeConnection cn = new SqlCeConnection(@"Data Source=GAI_Database.sdf");

    private void button1_Click(object sender, EventArgs e)
    {
        cn.Open();
        SqlCeCommand cm1 = new SqlCeCommand("DELETE FROM Drivers WHERE BY = @BY", cn);
        //cm1.Parameters.AddWithValue("@BY", textBox1.Text);
        cm1.Parameters.Add("@BY", System.Data.SqlDbType.NVarChar).Value = textBox1.Text;


        try
        {
            cm1.ExecuteNonQuery();
        }

        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

        cn.Close();
        this.driversTableAdapter.Fill(this.gAI_DatabaseDataSet.Drivers);
    }

【问题讨论】:

  • BY 是大多数 SQL 语言中的保留字。您应该引用它或转义它...如何取决于您使用的特定引擎。

标签: c# sql


【解决方案1】:

我认为BY 是保留字。尝试用括号转义它。

DELETE FROM Drivers WHERE [BY] = @BY

【讨论】:

    【解决方案2】:

    BY 是大多数 SQL 方言中的保留字。

    如果您指的是 Drivers 表中的一列,请尝试用撇号或括号括起来,如下所示:

    DELETE FROM Drivers WHERE [BY] = @BY
    

    或者可能:

    DELETE FROM Drivers WHERE ´BY´ = @BY
    

    取决于您使用的 RDBMS。

    【讨论】:

      【解决方案3】:

      BY 是每个数据库中的保留字。 试试看

      DELETE FROM Drivers WHERE [BY] = @BY
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-23
        • 1970-01-01
        • 1970-01-01
        • 2021-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多