【问题标题】:Update in GridView "No value given for one or more parameters"在 GridView 中更新“没有为一个或多个参数提供值”
【发布时间】:2012-02-23 16:58:45
【问题描述】:

我有这段代码(如下),我收​​到以下错误:

没有为一个或多个参数指定值

但是当它再次运行时,'RateCenterName'、'QuantityThreshold'、'RateCenterID' 的值会显示更新,但'Province' 的值不会更新

代码:

string updateSql = "UPDATE RateCenters SET RateCenterName = ?, Province=?, QuantityThreshold = ?" + " WHERE RateCenterID= ?";     

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{                    
    GridViewRow row = (GridViewRow)GridView1.Rows[e.RowIndex];
    DropDownList ddl = (DropDownList)row.FindControl("DropDownList2"); // assigning the dropdownlist item to 'ddl'
    TextBox rateCenterName = (TextBox)row.FindControl("txtRateCenterName"); // assigning textbox input item
    TextBox quantityThreshold = (TextBox)row.FindControl("txtQuantityThreshold"); // assigning textbox input item
    Label ratecenterid = (Label)row.FindControl("Label1"); // assigning the label value
    //OleDbConnection conn = new OleDbConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ToString());
    OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Documents and Settings\arjun.giridhar\My Documents\Visual Studio 2010\Projects\BillingApplicationNew\BillingApplicationNew\App_Data\db1.mdb;Persist Security Info=False");
    OleDbCommand cmd = null;            
    try
    {
        cmd = new OleDbCommand(updateSql, conn);

        cmd.Parameters.Add("@RateCenterName", OleDbType.VarChar).Value = rateCenterName.Text;
        cmd.Parameters.Add("@Province", OleDbType.VarChar).Value = ddl.SelectedItem.Text;
        cmd.Parameters.Add("@QuantityThreshold", OleDbType.Integer).Value = Convert.ToUInt32(quantityThreshold.Text);
        cmd.Parameters.Add("@RateCenterID", OleDbType.Integer).Value = Convert.ToInt32(ratecenterid.Text);

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

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

谁能看出问题所在?

版主编辑:

他解决了问题,但他的解决方案深入其中一个评论线程:

我明白了,我删除了 Row 更新事件并尝试了一次 再次不添加该事件。

认为他的意思是:他将此代码从 RowUpdating 事件处理程序中取出并放在其他地方。

【问题讨论】:

  • at 符号是参数名称的一部分。
  • @500-InternalServerError 我改了,还是报错
  • 请编辑您的问题,以便我们看到您的代码的最新版本(每个@?WHERE 之前的空格)。
  • @egrunin:我已经编辑到更新代码了!!
  • 仍然省略了WHERE之前的空格。

标签: asp.net ms-access gridview


【解决方案1】:

您的代码可能存在问题,因为您正在尝试编辑访问数据库并且您正在编写 sqldatabase 的代码......

您更新声明代码

string updateSql = "UPDATE RateCenters SET RateCenterName =?, Province=? ,
           QuantityThreshold = ? WHERE RateCenterID= ?";
            using (OleDbConnection con = new OleDbConnection(scon))
            {
                using (OleDbCommand cmd = new OleDbCommand(str, con))
                {

                    cmd.CommandType = CommandType.Text;
                    cmd.Parameters.AddWithValue("RateCenterName", str2);
                    cmd.Parameters.AddWithValue("Province", str3);
                    cmd.Parameters.AddWithValue("QuantityThreshold ", str4);
                    cmd.Parameters.AddWithValue("RateCenterID", str5);


                    con.Open();
                    cmd.ExecuteNonQuery();
                }
            }

【讨论】:

  • str2、str3、str4、str5的地方应该写什么??
  • @ArjunBabu - 你的 texbox 和下拉 vale 你还有什么想法?你以前做过的……
  • @ArjunBabu- 你能调试代码............你得到所有值,即文本框和下拉数据?如果其中一个是空白的,则可能会导致问题......
  • 我检查过了,所有的值都被读取了,但我希望它没有被插入到参数中
  • @ArjunBabu - 不推荐,但删除参数并尝试直接传递值....这可能会导致 sql 注入问题,但这只是为了尝试............ ..
【解决方案2】:

在构建 SQL 时,WHERE 之前缺少空格。
示例代码中的第 2 行。

【讨论】:

    【解决方案3】:
    "WHERE RateCenterID= @RateCenterID"; // this the error. you need to provide space before where  
    

    您需要在 Where 之前添加空格。

    这个你应该试试

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

    【讨论】:

      【解决方案4】:

      最可能的问题是将空值传递给RateCenterNameProvince

      当你尝试这个时会发生什么:

      cmd.Parameters.Add("@RateCenterName", OleDbType.VarChar).Value = "rateCenter";
      cmd.Parameters.Add("@Province", OleDbType.VarChar).Value = "ddl";
      cmd.Parameters.Add("@QuantityThreshold", OleDbType.Integer).Value = 0;
      cmd.Parameters.Add("@RateCenterID", OleDbType.Integer).Value = 1;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多