“没有给出一个或多个必需参数的值。”

时间:2013-08-05 19:55:06

标签: c# ms-access

当我点击btnCheckout时,它会给我 “没有给出一个或多个必需参数的值。”

有谁知道为什么?

protected void btnCheckOut_Click(object sender, ImageClickEventArgs e)
        {
            string strPay = DropDownList1.Items[DropDownList1.SelectedIndex].Text;
            string strDel = DropDownList2.Items[DropDownList2.SelectedIndex].Text;
            OleDbConnection mDB = new OleDbConnection();
            mDB.ConnectionString = "Provider = Microsoft.ACE.OLEDB.12.0;Data source="
                + Server.MapPath("~/App_Data/webBase.accdb");
            string strStatus = "CheckedOut";
            int intOrderNo = (int)Session["sOrderNo"];
            String strSqlUpdate = "UPDATE orderInfo SET orderPayMode = @Pay, "
                + "orderDelMode = @Del, orderStatus = @Status WHERE orderNo = " + intOrderNo;
            OleDbCommand cmd;
            cmd = new OleDbCommand(strSqlUpdate, mDB);
            cmd.Parameters.AddWithValue("@Pay", strPay);
            cmd.Parameters.AddWithValue("@Del", strDel);
            cmd.Parameters.AddWithValue("@Status", strStatus);
            mDB.Open();
            cmd.ExecuteNonQuery();
            mDB.Close();
            Response.Redirect("OrderDetails.aspx");
        }

2 个答案:

答案 0 :(得分:3)

一个或多个参数为空。检查strPay,strDel或strStatus是否为null。 如果其中任何一个为null,则可以发送空字符串或SqlString.Null。

如果某个参数值为null,则不会添加该参数,这就是为什么会出现此错误。

cmd.Parameters.AddWithValue("@Pay", strPay==null?SqlString.Null:strPay);

答案 1 :(得分:1)

要添加nhrobin所说的内容,请考虑将代码更改为:

cmd.Parameters.AddWithValue("@Pay", strPay ?? "");
cmd.Parameters.AddWithValue("@Del", strDel ?? "");
cmd.Parameters.AddWithValue("@Status", strStatus ?? "");

这应该有助于它成功。然而,一个更引人注目的问题是:

  

当这些值为null

时, 应该

这是一个你必须要回答的问题。如果我提供的内容令人满意,那么你就可以了。