0

文字列「testId」をデータベースから選択した値に設定しようとしていますが、次のエラーが発生します。

1 つ以上の必須パラメーターに値が指定されていません。

コードをそのままにしておくと機能しますが、行がコメントアウトされていないとエラーが発生します

string testId = "";
protected void Page_Load(object sender, EventArgs e)
{

}
protected void registerButton_Click(object sender, EventArgs e)
{
    try
    {
        string connString = (@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=|DataDirectory|HorseDB.mdb");
        OleDbConnection conn = new OleDbConnection(connString);
        conn.Open();
        OleDbCommand cmd = conn.CreateCommand();
        OleDbCommand cmdSelect = conn.CreateCommand();
        cmd.CommandText = @"INSERT INTO [Users]([UserName], [UserSurname], [CellNumber], [Email], [Password])VALUES(@Name, @Surname, @Number, @Email, @Password)";
        //cmdSelect.CommandText = @"SELECT [UserId] FROM [Users] WHERE [Email] = @Email";
        cmd.Parameters.AddWithValue("@Name", registerNameTexbox.Text);
        cmd.Parameters.AddWithValue("@Surname", registerSurnameTextbox.Text);
        cmd.Parameters.AddWithValue("@Number", registerNumbertextbox.Text);
        cmd.Parameters.AddWithValue("@Email", registerEmailTextbox.Text);
        cmd.Parameters.AddWithValue("@Password", registerPasswordTextbox.Text);
        cmd.ExecuteNonQuery();
        //testId = cmdSelect.ExecuteNonQuery().ToString();
        conn.Close();
        paymentSite();

    }
    catch (OleDbException fail)
    {
        errorLabel1.Text = fail.Message;
    }
}
4

2 に答える 2

3

cmdSelect のクエリが @Email を参照しているにもかかわらず、パラメータを cmd に追加していますが、cmdSelect には追加していません。

次の行を追加します。

cmdSelect.Parameters.AddWithValue("@Email", registerEmailTextbox.Text);
于 2013-07-06T13:45:47.693 に答える
0

次のように、cmdSelect コマンドに必要な@Email パラメータを追加していないようです。

cmdSelect.CommandText = @"SELECT [UserId] FROM [Users] WHERE [Email] = @Email";
Parameters.AddWithValue("@Email", registerEmailTextbox.Text ?? DBNull.Value);

この後、あなたの ExecuteNonQuery は問題なく動作する予感があります。

また、コメントで @Uwe-Keim が言及しているように、ベスト プラクティスとして、最初にテキスト ボックスの null 値を確認することをお勧めします。スニペットでは、 null 合体 operatorを使用して基本的な形式でこれを追加しました。

于 2013-07-06T13:52:09.910 に答える