解析查询时出错:[令牌行号= 1,令牌行偏移= 27,错误令牌= BY]

时间:2014-05-13 13:25:38

标签: c# sql

我试图传递sql命令来删除具有属性BY(唯一nvarchar)的数据,但每次都会得到此解析错误。现在我也尝试对名为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);
    }

3 个答案:

答案 0 :(得分:1)

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

如果您在引用“驱动程序”表中的某列时,请尝试使用撇号或括号将其括起来,如下所示:

DELETE FROM Drivers WHERE [BY] = @BY

或可能:

DELETE FROM Drivers WHERE ´BY´ = @BY

取决于您正在使用的RDBMS。

答案 1 :(得分:1)

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

DELETE FROM Drivers WHERE [BY] = @BY

答案 2 :(得分:1)

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

DELETE FROM Drivers WHERE [BY] = @BY