我有这个代码(下面),我得到了以下错误:
一个或多个参数没有给定值
但当它再次运行时,会显示更新的"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";
最可能的问题是将空值传递给RateCenterName
或Province
。
当你尝试这个时会发生什么:
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;