我正在尝试编写一个更新语句,用于将数据从asp.net gridview插入到sql server 2005数据库。但是它显示错误,请告诉我如何解决。
cmdUpdate.CommandText = String.Format("Update Products SET ProductName=
{0},UnitsInStock={1},UnitsOnOrder={2},ReorderLevel={3} WHERE ProductID={4} AND
SupplierID={5}", "productname.Text, unitsinstock.Text, unitsonorder.Text,
recorderlevel.Text, employeeid.Text, supplierid.Text");
错误是 - 索引(从零开始)必须大于或等于零且小于参数列表的大小。
答案 0 :(得分:2)
您对string.Format的语法不正确 - 字符串模板后面的每个参数都应该是自己的,没有围绕它们的双引号...
这会有效(请注意我已经从'productname.Text'之前和'supplierid.Text'之后删除了双引号):
String.Format("Update Products SET ProductName={0}, UnitsInStock={1}, UnitsOnOrder={2}, ReorderLevel={3} WHERE ProductID={4} AND SupplierID={5}",
productname.Text, unitsinstock.Text, unitsonorder.Text,
recorderlevel.Text, employeeid.Text, supplierid.Text);
答案 1 :(得分:0)
你错过了争论,
例如,
str=String.Format("{0} {1}",arg1,arg2);
不要使用hard-coded sql字符串。尝试学习/使用参数化查询。
编辑:
string ConnectionString = "put_connection_string";
using (SqlConnection con = new SqlConnection(ConnectionString))
{
using (SqlCommand cmd = new SqlCommand())
{
string sql = "Update Products SET
ProductName=@ProductName,
UnitsInStock=@UnitsInStock,
UnitsOnOrder=@UnitsOnOrder,
ReorderLevel=ReorderLevel
WHERE ProductID=ProductID AND SupplierID=@SupplierID";
cmd.CommandText = sql;
cmd.Connection = con;
cmd.Parameters.Add("@ProductName", System.Data.SqlDbType.VarChar, 50).Value =productname.Text;
cmd.Parameters.Add("@UnitsInStock", System.Data.SqlDbType.Int).Value =unitsinstock.Text;
cmd.Parameters.Add("@UnitsOnOrder", System.Data.SqlDbType.Int).Value =unitsonorder.Text;
cmd.Parameters.Add("@ReorderLevel ", System.Data.SqlDbType.Int).Value =recorderlevel.Text;
cmd.Parameters.Add("@ProductID", System.Data.SqlDbType.Int).Value =producteid.Text;
cmd.Parameters.Add("@SupplierID", System.Data.SqlDbType.Int).Value =supplierid.Text;
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
编辑:什么是C#using block?