我正在尝试将字符串值添加到SQL Server Managemnet Studio中的SQL数据库,但这不起作用。
这样做的正确方法是什么?
SqlCommand addProduct = new SqlCommand("INSERT INTO dbo.Test VALUES(" + txtProductName.Text + ");", sqlConnect);
try
{
addProduct.ExecuteNonQuery();
MessageBox.Show("This product has been succesfully added to the database!!");
}
catch (Exception error2)
{
MessageBox.Show(error2.ToString());
}
答案 0 :(得分:1)
似乎您忘记为添加的字符串添加引号。像这样的东西
SqlCommand addProduct = new SqlCommand("INSERT INTO dbo.Test VALUES('" + txtProductName.Text + "');", sqlConnect);
答案 1 :(得分:1)
让我们考虑一下这里生成的内容:
addProduct = new SqlCommand("INSERT INTO dbo.Test VALUES(" + txtProductName.Text + ");", sqlConnect);
如果txtProductName.Text的值为“monkey nuts
”,那么您的SqlCommand将具有以下命令:
INSERT INTO dbo.Test VALUES(monkey nuts);
这不是有效的SQL,因为该字符串尚未引用。现在,如果txtProductName.Text的值为“'foo');DROP TABLE Test; --
”,那么您的SqlCommand将具有以下命令:
INSERT INTO dbo.Test VALUES('foo');DROP TABLE Test; --);
虽然有效的SQL(因为我将撇号放在文本框中引用字符串),但这并不是你想要做的。
最安全的方法是使用参数化,所以更像是:
using (SqlCommand addProduct = new SqlCommand("INSERT INTO dbo.Test VALUES(@ProductName);", sqlConnect);
{
addProduct.Parameters.Add("@ProductName", SqlDbType.NVarChar, 50).Value = txtProductName.Text;
addProduct.ExecuteNonQuery();
MessageBox.Show("This product has been succesfully added to the database!!");
}