网格视图"No value given for one or more parameters"中的更新



我有这个代码(下面),我得到了以下错误:

一个或多个参数没有给定值

但当它再次运行时,会显示更新的"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 Settingsarjun.giridharMy DocumentsVisual Studio 2010ProjectsBillingApplicationNewBillingApplicationNewApp_Datadb1.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事件处理程序中取出,放在其他地方。

您的代码中可能存在问题,因为您正在尝试编辑访问数据库,并且正在编写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();
                }
            }

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

"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";     

最可能的问题是将空值传递给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;

相关内容

最新更新