0

我正在尝试编写一个更新语句,用于将数据从 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");

错误是 - 索引(从零开始)必须大于或等于零且小于参数列表的大小。

4

2 回答 2

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);
于 2011-09-30T08:10:09.347 回答
0

你错过了争论,

例如,

str=String.Format("{0} {1}",arg1,arg2);

不要使用硬编码的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?

  1. 如果该类型实现了 IDisposable,它会自动释放它
  2. 提供一种方便的语法,确保正确使用 IDisposable 对象。
  3. 避免使用语句的问题
于 2011-09-30T08:12:55.137 回答