问题是为什么我无法将插入值放入我的数据库中。 (我不确定“where statement”)
目标:我想将随机数保存在数据库中,该数据库用于电子邮件验证号码。
OleDbConnection connection = new OleDbConnection();
connection.ConnectionString =@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\sim\Desktop\Web.accdb";
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
Random rnd = new Random();
int number = rnd.Next(1000, 5000);
command.CommandText = "insert into Registration ([Authentication]) values (@number) where [Email] = '"+ TextBox1.Text +"';";
command.Parameters.AddWithValue("@number", number);
command.ExecuteNonQuery();
connection.Close();
MessageBox.Show("sucessfull");
答案 0 :(得分:3)
当您需要UPDATE查询时,使用INSERT查询的简单错误的一部分,您的代码中有一些要更改的内容,以使其遵循最佳实践。
Random rnd = new Random();
int number = rnd.Next(1000, 5000);
string cmdText = @"UPDATE Registration
SET [Authentication] = @number
WHERE [Email] = @email";
using(OleDbConnection connection = new OleDbConnection(....connectionstring ....))
using(OleDbCommand command = new OleDbCommand(cmdText, connection))
{
connection.Open();
command.Parameters.Add("@number", OleDbType.Integer).Value = number;
command.Parameters.Add("@email", OleDbType.VarWChar).Value = TextBox1.Text;
int rowsUpdated = command.ExecuteNonQuery();
if(rowsUpdated > 0)
MessageBox.Show("sucessfull");
else
MessageBox.Show("email not found");
}
首先,每个一次性物体(如连接和命令)都应该用Using Statement括起来,以确保在例外的情况下正确关闭和处置。其次,用于与数据库交互的每个命令文本应始终使用参数编写,而不是使用字符串连接编写。这是将值传递给数据库的正确方法,有助于避免Sql注入和解析问题。 (更不用说查询文本的更好理解) 最后,最好避免AddWithValue,因为它有严重的缺点,你可以阅读本文:Can we stop to use AddWithValue already?