如何摆脱";没有给出一个或多个所需参数的值”;

本文关键字:一个 参数 quot 何摆脱 | 更新日期: 2023-09-27 18:25:37

我有以下代码,

当单击Gridview中的更新按钮时,它会抛出一个错误:没有为一个或多个必需的参数给定值

但是,当它再次运行时,甚至数据库更新时,都可以看到新的更新数据。

string updateSql = "UPDATE RateCenters SET RateCenterName = @RateCenterName, Province = @Province, QuantityThreshold = @QuantityThreshold" + " WHERE RateCenterID= @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());
        string scon = @"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";
        OleDbConnection conn = new OleDbConnection(scon);

        try
        {
            OleDbCommand cmd = new OleDbCommand(updateSql, conn);
            cmd.CommandText = updateSql;
            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.ToInt32(quantityThreshold.Text);
            cmd.Parameters.Add("@RateCenterID", OleDbType.Integer).Value = Convert.ToInt32(ratecenterid.Text);
               conn.Open();
                cmd.ExecuteNonQuery();
                GridView1.EditIndex = -1; //refreshing
                GridView1.DataBind();
            }         
            catch (OleDbException ex)
            {
                throw (ex);
            }
            finally
            {
                conn.Close();
                conn.Dispose();
            }

以下是上述错误的堆栈跟踪:

没有为一个或多个必需参数给定值。描述:在执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误以及错误在代码中的来源的更多信息。异常详细信息:System.Data.OleDb.OleDbException:未为一个或多个必需参数给定值。

源错误:在执行当前web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。堆栈跟踪:[OleDbException(0x80040e10):没有为一个或多个必需的参数给定值。]System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult-hr)+1070856System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS-dbParams,Object&executeResult)+247System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object&executeResult)+194System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior,Object&executeResult)+58System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior行为,String方法)+167System.Data.OleDb.OleDbCommand.ExecuteNonQuery()+113System.Web.UI.WebControls.SqlDataSourceView.ExecuteDbCommand(DbCommand命令,DataSourceOperation操作)+394System.Web.UI.WebControls.SqlDataSourceView.ExecuteUpdate(IDictionary键、IDictionaryvalue、IDiction oldValues)+697System.Web.UI.DataSourceView.Update(IDictionary键、IDictionaryvalue、IDiction oldValues、DataSourceViewOperationCallback回调)+95System.Web.UI.WebControls.GridView.HandleUpdate(GridViewRow行,Int32行索引,布尔原因验证)+1226System.Web.UI.WebControls.GridView.HandleEvent(EventArgs e,布尔原因验证,字符串验证组)+716System.Web.UI.WebControls.GridView.OnBubbleEvent(对象源,EventArgs e)+95System.Web.UI.Control.RiseBubbleEvent(对象源,EventArgs参数)+37System.Web.UI.WebControls.GridViewRow.OnBubbleEvent(对象源,EventArgs e)+121System.Web.UI.Control.RiseBubbleEvent(对象源,EventArgs参数)+37System.Web.UI.WebControls.LinkButton.OnCommand(CommandEventArgs e)+125System.Web.UI.WebControls.LinkButton.RisePostBackEvent(字符串事件参数)+169System.Web.UI.WebControls.LinkButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串事件参数)+9System.Web.UI.Page.RisePostBackEvent(IPostBackEventHandler源控件,字符串事件参数)+13System.Web.UI.Page.RisePostBackEvent(NameValueCollection postData)+176System.Web.UI.Page.ProcessRequestMain(布尔值包括同步点之前的阶段,布尔值包括异步点之后的阶段)+5563**

请检查代码并帮助我整理此任务

谨致问候,Arjun

如何摆脱";没有给出一个或多个所需参数的值”;

来自OleDbCommand。参数:

当CommandType设置为Text时,OLE DB.NET提供程序不支持将参数传递给SQL语句或OleDbCommand调用的存储过程的命名参数。在这种情况下,必须使用问号(?)占位符。例如:

SELECT * FROM Customers WHERE CustomerID = ?

因此,请尝试使用未命名的参数(有关完整示例,请参阅文档)。

如果您查看下面的链接,在"备注"下会显示"使用这些集合的常见方法是在用户提供的值存储在数据源中之前对其进行HTML编码。"

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowupdating.aspx