3

当我单击 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");
        }
4

2 回答 2

3

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

如果某个参数值为 null,则不会添加该参数,这就是此错误的原因。

cmd.Parameters.AddWithValue("@Pay", strPay==null?SqlString.Null:strPay);
于 2013-08-05T20:00:55.783 回答
1

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

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

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

当这些值是 时,我们应该做什么null

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

于 2013-08-05T20:04:57.277 回答