我想用mssql中的表填充用户输入的值(错误来自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语法。
答案 0 :(得分:1)
我在values
之前错过了一个结束圆括号:
string insert = "INSERT INTO TipAutocar ([IDTipAutocar], [Marca], [Model], [Nrlocuri] values ([@IDTipAutocar], [@Marca], [@Model], [@Nrlocuri]))";
您不允许在参数周围使用[]
,否则它不是参数,您将收到错误f.e. “无效的列名[@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)";
答案 1 :(得分:1)
看看这个括号;
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);
不再使用AddWithValue
了。 It may generate unexpected results。请使用.Add()
方法重载来指定SqlDbType
和参数大小。