ドロップダウンリストがあります。ボタン クリック イベントで、選択した値を取得し、それを整数に変換して、データベースの既存の行に保存します。次のエラーが表示されます。
「無効なキャスト例外がキャッチされました。
SqlParameterCollection は、SqlCommand オブジェクトではなく、null 以外の SqlParameter タイプ オブジェクトのみを受け入れます。」
注: ブレークポイントを使用してデバッグを行うと、整数をパラメーターとして送信しようとしているように見えます。選択したドロップダウン値の変数の内容を表示する小さなポップアップ ウィンドウで、値を囲む引用符が表示されません。
注: SQL Server でストアド プロシージャを直接実行すると、テーブル内の行が正常に更新されます。
ページソースからのドロップダウンリストは次のとおりです。
<select name="ctl00$ContentPlaceHolder1$CustomerDetailsEdit1$ShippingRegionDropDownList" id="ctl00_ContentPlaceHolder1_CustomerDetailsEdit1_ShippingRegionDropDownList" style="width:200px;">
<option value="1">Please Select</option>
<option value="2">U.S. / Canada</option>
<option value="3">Europe</option>
<option selected="selected" value="4">Rest of World</option>
値を取得して整数に変換するボタン クリック イベントを次に示します (これは、おそらく 3 回目か 4 回目の変換の試みです。変換プロセスに問題があると推測しています。解析と変換を試みました。)
protected void Button2_Click(object sender, EventArgs e)
{
// Get the current user's ID.
string customerId = Membership.GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey.ToString();
// Get the values from the text box controls
int shippingRegionId = Int32.Parse(ShippingRegionDropDownList.SelectedValue);
try
{
// Execute the update command
bool success = CustomerDetailsAccess.UpdateShippingRegionID(customerId, shippingRegionId);
// Display status message
statusLabel.Text = success ? "Shipping Region update successful." : "Try - Shipping Region update failed";
}
catch
{
// Display error
statusLabel.Text = "Catch - Shipping Region update failed.";
}
}
*注: CATCH でエラーが発生しています。
ストアド プロシージャを呼び出す他の既存のコードに送信するパラメーターを作成するコードを次に示します。(スペースを節約するためと、長い間機能しているため、他のコードは含めたくありません。しかし、誰かがそれを見たい場合は、喜んで貼り付けます。)
// Update customer details
public static bool UpdateShippingRegionID(string customerId, int shippingRegionId)
{
// Get a configured DbCommand object
DbCommand comm = GenericDataAccess.CreateCommand();
// Set the stored prodcedure name
comm.CommandText = "UpdateShippingRegionID";
// Create a new parameter
DbParameter param = comm.CreateParameter();
param.ParameterName = "@CustomerID";
param.Value = customerId;
param.DbType = DbType.String;
param.Size = 50;
comm.Parameters.Add(param);
// Create a new parameter
param = comm.CreateParameter();
param.ParameterName = "@ShippingRegionID";
param.Value = shippingRegionId;
param.DbType = DbType.Int32;
comm.Parameters.Add(comm);
// Result will represent the number of changed rows
int result = -1;
try
{
// Execute the stored procedure
result = GenericDataAccess.ExecuteNonQuery(comm);
}
catch
{
// Any errors are logged in the GenericDataAccess. It is not done here.
}
// Result will be 1 in case of success
return (result != -1);
}
ストアド プロシージャは次のとおりです。
CREATE PROCEDURE UpdateShippingRegionID
(@CustomerID char(50),
@ShippingRegionID int)
AS
UPDATE CustomerDetails
SET
ShippingRegionID = @ShippingRegionID
WHERE CustomerID = @CustomerID
注: ShippingRegionID 列は INT です。