データセットとストアド プロシージャを使用して SQL テーブルからデータを取得しようとしています。プロシージャの実行後、データセットには値が 1 つだけ含まれている必要があります (ID 番号を取得しています。ID 番号は Costumers テーブルの主キーであるため、それぞれ 1 つだけ存在する必要があります)。IsCostumerIDTaken ストアド プロシージャは、パラメーターとして受け取る ID を返すだけです。見つかった場合は、それを返します。そうでない場合はどうなるかわかりません。おそらく0を返します。
public static bool IsCostumerIDTaken(string id)
{
SqlConnection conObj = GetConnection();
SqlCommand cmdObj = new SqlCommand("IsCostumerIDTaken", conObj);
cmdObj.CommandType = CommandType.StoredProcedure;
cmdObj.Parameters.Add("@ID", SqlDbType.NVarChar).Value = id;
SqlDataAdapter da = new SqlDataAdapter(cmdObj);
DataSet ds = new DataSet();
da.Fill(ds);
if (ds.Tables[0].Rows[0][0].ToString() != id)
return false;
return true;
}
私のページの1つでこのコマンドを実行した後
Label1.Text = DAL.IsCostumerIDTaken(TextBox1.Text).ToString();
次のエラーが表示されます。
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.IndexOutOfRangeException: 位置 0 に行がありません。
Source Error: Line 73: DataSet ds = new DataSet(); Line 74: da.Fill(ds); Line 75: if (ds.Tables[0].Rows[0][0].ToString() != id) Line 76: return false; Line 77: return true;
ここでの問題は何ですか?データセットからデータを正しく引き出していませんか?