cmd.ExecuteNonQuery()を中心に展開するコードに問題があります。およびエラー:スカラー変数「@ drID1」を宣言する必要があります。
初めてボタンをクリックすると、このコードもリンクされますが、もう一度クリックすると、上記のエラーが発生します。私はこのコードでいくつかの異なることをいじったので、おそらくそこにはいくつかの悪い習慣がありますが、私はまだC#に比較的慣れていないので、我慢してください。
最初は完全に動作し、2回目は壊れてしまうのはなぜですか?
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の値を持つパラメーターを追加する必要があります。
配達領収書がない場合、これらのパラメータは作成されず、このエラーが発生します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加