从Access数据库中选择会出现错误
本文关键字:错误 选择 Access 数据库 | 更新日期: 2023-09-27 18:21:31
我试图将字符串"testId"设置为从数据库中选择的值,但收到以下错误:
没有为一个或多个必需参数给定值。
当我把代码保持原样时,它是有效的,但当行没有被注释掉时,我会得到错误
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;
}
}
您将参数添加到cmd,但不添加到cmdSelect,即使您对cmdSelect的查询引用了@Email。
添加此行:
cmdSelect.Parameters.AddWithValue("@Email", registerEmailTextbox.Text);
您似乎没有为cmdSelect命令添加所需的@电子邮件参数,如下所示:
cmdSelect.CommandText = @"SELECT [UserId] FROM [Users] WHERE [Email] = @Email";
Parameters.AddWithValue("@Email", registerEmailTextbox.Text ?? DBNull.Value);
我有一种预感,你的ExecuteNonQuery在这之后会很好地工作。
此外,正如@Uwe Keim在评论中提到的那样,作为最佳实践,您可能需要首先检查文本框中的空值。在这个片段中,我使用null合并运算符以基本形式附加了它。