尝试将字符串值添加到SQL数据库 - 帮助和建议

时间:2015-01-27 18:16:13

标签: c# sql sql-server

我正在尝试将字符串值添加到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());
}

2 个答案:

答案 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!!");
}