2012-02-22 154 views
0

我有一个代码在下面,这段代码更新gridview中的下拉列表。该数据库在MS Access 我收到错误:“参数@RateCenterName没有默认值”。参数没有默认值

RateCenterID是主键

string updateSql = "UPDATE [RateCenters] " + "SET [RateCenterName] = @RateCenterName, [Province]= @Province, [QuantityThreshold] [email protected] " + "WHERE [RateCenterID][email protected]"; 

string ratecenterID; 

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e) 
    {      
     GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex]; 
     DropDownList ddl = (DropDownList)row.FindControl("DropDownList2"); 
     TextBox rateCenterName = (TextBox)row.FindControl("TextBox1"); 
     TextBox quantityThreshold = (TextBox)row.FindControl("TextBox2"); 

     OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ToString()); 
     OleDbCommand cmd = null; 

     try 
     { 
      conn.Open(); 
      cmd = new OleDbCommand(updateSql, conn); 
      cmd.Parameters.Add("@RateCenterName", OleDbType.VarChar).Value = rateCenterName.Text; 
      cmd.Parameters.Add("@Province", OleDbType.VarChar).Value = ddl.SelectedValue; 
      cmd.Parameters.Add("@QuantityThreshold", OleDbType.VarChar).Value = quantityThreshold.Text; 

      cmd.Connection = conn; 
      cmd.ExecuteNonQuery(); 

      GridView1.EditIndex = -1; 
      GridView1.DataBind(); 
     } 
     catch (OleDbException ex) 
     { 
      throw (ex); 
     } 
     finally 
     { 
      cmd.Dispose(); 
      conn.Close(); 
      conn.Dispose(); 
     } 
    } 

请帮我解决这个问题。

问候,

阿琼

回答

2

您的查询有四个参数(@RateCenterName@Province@QuantityThreshold@RateCenterID),但你只能传递三个。

@RateCenterID缺失。

+0

+1发布第一个答案:-) – Matthias 2012-02-22 10:16:55

+0

是弗雷德里克但cmd.Parameters.Add(“@ RateCenterID”,OleDbType.VarChar).Value = ??? – 2012-02-22 10:18:56

+1

那么,您应该知道该参数需要传递什么,因为它代表了您尝试匹配的费率中心......我无法告诉您从用户输入中获取该值的位置? – 2012-02-22 10:21:23

0

您忘记了where语句中正在使用的RateCenterID参数。

希望它可以帮助

+0

cmd.Parameters.Add(“@ RateCenterID”,OleDbType.VarChar).Value = ??? – 2012-02-22 10:18:35

0

你应该通过@RateCenterID也。

+0

cmd.Parameters.Add(“@ RateCenterID”,OleDbType.VarChar).Value = ??? – 2012-02-22 10:19:42

+0

'rateCenterId'。但是,这将是一个变量,你当然必须先创建(大概在'TextBox rateCenterName'的行)。 – 2012-02-22 10:21:22

0

您忘记为@RateCenterID添加值。

+0

cmd.Parameters.Add(“@ RateCenterID”,OleDbType.VarChar).Value = ??? – 2012-02-22 10:19:24

+0

这就是你必须知道的;-)也许你只是想省略查询的最后一部分...... – Matthias 2012-02-22 10:21:58

+1

当然,这将覆盖3列的* all *行具有相同的值:) – 2012-02-22 10:28:34

0

您已声明四个参数,但您只添加了三个。

您忘记了添加@RateCenterID参数。

+0

谢谢,但cmd.Parameters.Add(“@ RateCenterID”,OleDbType.VarChar).Value = ??? – 2012-02-22 10:20:20