簡體   English   中英

Visual Studio Web應用程序使用C#將數據發送到SQL數據庫的問題(cmd.ExecuteNonQuery();)

[英]Visual Studio Web Application using C# to send data to a SQL database issues (cmd.ExecuteNonQuery();)

我的代碼圍繞cmd.ExecuteNonQuery();遇到問題 錯誤:必須聲明標量變量“ @ drID1”。

第一次單擊該按鈕時,此代碼也被鏈接,但是它可以完美運行,但是當我再次單擊時,出現上述錯誤。 我在這段代碼中弄亂了一些不同的東西,因此其中可能存在一些不好的做法,但是我對C#還是比較陌生,所以請多多包涵。

我只是無法理解為什么它第一次可以完美運行而第二次卻無法運行?

using (SqlConnection connection = new SqlConnection("User id = ******;" +
                                                                        "pwd = *******;" +
                                                                        "Data Source = *******;" +
                                                                        "persist security info = *******;" +
                                                                        "Initial Catalog = *******;"))
        {
            //***************************SQL COMMAND**************************
            SqlCommand cmd = new SqlCommand("INSERT INTO ******* (SMSID, RecipientNo, Message, TimeDateSent, Balance, Pending, Code, ErrMsg, drID1, drDestination1, drText1, drReceived1, drCode1, drHasError1, drErrMsg1, drID2, drDestination2, drText2, drReceived2, drCode2, drHasError2, drErrMsg2, Sender) VALUES (@SMSID, @RecipientNo, @Message, @TimeDateSent, @Balance, @Pending, @Code, @ErrMsg, @drID1, @drDestination1, @drText1, @drReceived1, @drCode1, @drHasError1, @drErrMsg1, @drID2, @drDestination2, @drText2, @drReceived2, @drCode2, @drHasError2, @drErrMsg2, @Sender)");

            cmd.CommandType = CommandType.Text;
            cmd.Connection = connection;
            //**************************Input Values**************************
            cmd.Parameters.AddWithValue("@SMSID", sendResult.MessageId);
            cmd.Parameters.AddWithValue("@RecipientNo", TextBox1.Text);
            cmd.Parameters.AddWithValue("@Message", TextBox2.Text);
            cmd.Parameters.AddWithValue("@TimeDateSent", DateTime.Now);
            cmd.Parameters.AddWithValue("@Balance", sendResult.MessageBalance);
            cmd.Parameters.AddWithValue("@Pending", sendResult.PendingMessages);
            cmd.Parameters.AddWithValue("@Code", sendResult.Code);
            //Handle error message
            if (sendResult.HasError)
            {
                cmd.Parameters.AddWithValue("@ErrMsg", sendResult.ErrorMessage);
            }
            else
            {
                cmd.Parameters.AddWithValue("@ErrMsg", "");
            }
            //Delivery Receipt handling
            var deliveryReceipts = client.GetDeliveryReceipts();
            if (deliveryReceipts.Length > 0)
            {
                //Counter var
                int i = 1;
                //For each Delivery Receipt do this: (there should be only 1 or 2)
                foreach (var deliveryReceipt in deliveryReceipts)
                {
                    ClientScript.RegisterStartupScript(this.GetType(), "DeliveryReceipt Text", "alert('" + i + " - " + deliveryReceipt.Text + "');", true);
                    int c = deliveryReceipts.Count();
                    if (i == 1)
                    {
                        cmd.Parameters.AddWithValue("@drID1", deliveryReceipt.Id);
                        cmd.Parameters.AddWithValue("@drDestination1", deliveryReceipt.Destination);
                        cmd.Parameters.AddWithValue("@drText1", deliveryReceipt.Text);
                        cmd.Parameters.AddWithValue("@drReceived1", deliveryReceipt.Received);
                        cmd.Parameters.AddWithValue("@drCode1", deliveryReceipt.Code);
                        cmd.Parameters.AddWithValue("@drHasError1", deliveryReceipt.HasError);
                        //Error handling
                        if (deliveryReceipt.HasError == true)
                        {
                            cmd.Parameters.AddWithValue("@drErrMsg1", deliveryReceipt.ErrorMessage);
                        }
                        else if (deliveryReceipt.HasError == false)
                        {
                            cmd.Parameters.AddWithValue("@drErrMsg1", "");
                        }
                        else
                        {
                            cmd.Parameters.AddWithValue("@drErrMsg1", "");
                        }
                        i++;
                    }
                    else if (i == 2)
                    {
                        if (c >= 2)
                        {
                            cmd.Parameters.AddWithValue("@drID2", deliveryReceipt.Id);
                            cmd.Parameters.AddWithValue("@drDestination2", deliveryReceipt.Destination);
                            cmd.Parameters.AddWithValue("@drText2", deliveryReceipt.Text);
                            cmd.Parameters.AddWithValue("@drReceived2", deliveryReceipt.Received);
                            cmd.Parameters.AddWithValue("@drCode2", deliveryReceipt.Code);
                            cmd.Parameters.AddWithValue("@drHasError2", deliveryReceipt.HasError);
                            //Error Handling
                            if (deliveryReceipt.HasError == true)
                            {
                                cmd.Parameters.AddWithValue("@drErrMsg2", deliveryReceipt.ErrorMessage);
                            }
                            else if (deliveryReceipt.HasError == false)
                            {
                                cmd.Parameters.AddWithValue("@drErrMsg2", "");
                            }
                            else
                            {
                                cmd.Parameters.AddWithValue("@drErrMsg2", "");
                            }
                            i++;
                        }
                        else
                        {
                            cmd.Parameters.AddWithValue("@drID2", "");
                            cmd.Parameters.AddWithValue("@drDestination2", "");
                            cmd.Parameters.AddWithValue("@drText2", "");
                            cmd.Parameters.AddWithValue("@drReceived2", "");
                            cmd.Parameters.AddWithValue("@drCode2", "");
                            cmd.Parameters.AddWithValue("@drHasError2", "");
                            //Error Handling
                            if (deliveryReceipt.HasError == true)
                            {
                                cmd.Parameters.AddWithValue("@drErrMsg2", deliveryReceipt.ErrorMessage);
                            }
                            else if (deliveryReceipt.HasError == false)
                            {
                                cmd.Parameters.AddWithValue("@drErrMsg2", "");
                            }
                            else
                            {
                                cmd.Parameters.AddWithValue("@drErrMsg2", "");
                            }
                            i++;
                        }
                    }
                }
                i = 1;
            }
            //Execute Query
            cmd.Parameters.AddWithValue("@Sender", System.Security.Principal.WindowsIdentity.GetCurrent().Name);
            connection.Open();
            cmd.ExecuteNonQuery();
        }
    }
}
SqlCommand cmd = new SqlCommand("INSERT INTO ******* (SMSID, RecipientNo, 
            Message, TimeDateSent, Balance, Pending, Code, ErrMsg, drID1,
            drDestination1, drText1, drReceived1, drCode1, drHasError1,
             drErrMsg1, drID2, drDestination2, drText2, drReceived2, 
            drCode2, drHasError2, drErrMsg2, Sender) 
VALUES (@SMSID, @RecipientNo, @Message, @TimeDateSent, @Balance, @Pending,
             @Code, @ErrMsg, @drID1, @drDestination1, @drText1, 
            @drReceived1, @drCode1, @drHasError1, @drErrMsg1, @drID2, 
            @drDestination2, @drText2, @drReceived2, @drCode2,
             @drHasError2, @drErrMsg2, @Sender)");

那是您的命令,並且連字符前面都帶有@的東西都必須有一個值作為SqlCommand的參數提供。 您最多只能將參數添加到@ErrMsg。 下一個是@ drID1,它沒有定義,就像錯誤消息中所說的那樣。

即使這些參數的值為null,也必須添加一個@名稱和null值的參數。

如果沒有交貨收據,則將不會創建這些參數,並且會出現此錯誤。

如果您的deliveryReceipts.Length == 0那么您將永遠不會添加其余參數: @drID1, @drDestination1, @drText1, @drReceived1, @drCode1, @drHasError1, @drErrMsg1, @drID2, @drDestination2, @drText2, @drReceived2, @drCode2, @drHasError2, @drErrMsg2, @Sender CommandText ,您列出了這些參數,因此期望它們在那里。

如果需要將它們作為可選參數,則需要創建CommandText語句(一個帶有附加參數,另一個不帶附加參數)。 然后,使用適合您要求的語句。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM