[英]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.