使用参数插入 SQL 会导致 "Incorect syntax near the keyword 'values'"

Insert SQL with parameters causes "Incorect syntax near the keyword 'values'"

我想用用户输入的值填充 mssql 中的 table(错误来自 NumericUpDown),我正在使用此代码:

 string cs= "Data Source=CODRINMA\CODRINMA;Initial Catalog=BusManager; Trusted_Connection=True;";
 string insert = "INSERT INTO TipAutocar ([IDTipAutocar], [Marca], [Model], [Nrlocuri] values ([@TipAutocar], [@Marca], [@Model], [@Nrlocuri]))";
try
{
    using (SqlConnection con = new SqlConnection(cs))
    {
        con.Open();

        SqlCommand cmd = new SqlCommand(insert, con);

        cmd.Parameters.AddWithValue("@IDTipAutocar", txtID.Text);
        cmd.Parameters.AddWithValue("@Marca", txtMarca.Text);
        cmd.Parameters.AddWithValue("@Model", txtModel.Text);
         cmd.Parameters.AddWithValue("@Nrlocuri", nmrLocuri.Value);
        int valoare = cmd.ExecuteNonQuery();
        con.Close();
        MessageBox.Show(valoare + "Tipul de autocar a fost adaugat cu succes!", "BusManager");

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

但是,当我按下按钮插入时,出现以下错误,我不知道该怎么办:

Incorect syntax near the keyword 'values'.

我在这里 values 之前缺少一个结束圆括号:

string insert = "INSERT INTO TipAutocar ([IDTipAutocar], [Marca], [Model], [Nrlocuri] values ([@IDTipAutocar], [@Marca], [@Model], [@Nrlocuri]))";

您不能在参数周围使用 [],否则它不是参数,您将得到一个错误 f.e。 "invalid columnname [@TipAutocar]"。

您也将参数命名为 @TipAutocar,但将其添加为 IDTipAutocar。 此外,请始终使用正确的类型,如果您使用 AddWithValue 从值推断类型,则更是如此。所以我猜 IDTipAutocar 是一个 int,然后将它解析为一个:

cmd.Parameters.AddWithValue("@IDTipAutocar", int.Parse(txtID.Text));

顺便说一句,我总是使用逐字字符串文字。这样我就可以根据需要格式化我的 sql 查询,即使是多行。这应该按预期工作:

string insert = @"INSERT INTO TipAutocar
                     ( IDTipAutocar, Marca, Model, Nrlocuri )
                  VALUES 
                     ( @IDTipAutocar, @Marca, @Model, @Nrlocuri)";

看看这个支架;

string insert = "INSERT INTO TipAutocar ([IDTipAutocar], [Marca], [Model], [Nrlocuri] values (@TipAutocar, [@Marca, @Model, @Nrlocuri))";
                                       ^^^

您在查询结束时关闭它,您应该在 VALUES 部分之前关闭它。

改为;

string insert = "INSERT INTO TipAutocar ([IDTipAutocar], [Marca], [Model], [Nrlocuri]) values (@TipAutocar, @Marca, @Model, @Nrlocuri)";
                                        ^^^                                         ^^^

不需要 顺便说一下,您的参数不允许使用方括号。还可以使用 using 语句来处理你的 SqlCommand。并且由于您将此语句用于 SqlConnection,因此无需使用 con.Close() 关闭它,因为此语句会自动执行此操作。

您还在命令中将参数名称定义为 @TipAutocar,但尝试将参数名称添加为不匹配的 @IDTipAutocar。更改您的参数名称,例如;

cmd.Parameters.AddWithValue("@TipAutocar", txtID.Text);

并且不要再使用 AddWithValueIt may generate unexpected results. Use .Add() method overloads instead to specify your SqlDbType 和参数大小。