如何用where语句编写insert sql?

时间:2015-03-29 12:41:59

标签: c# sql insert where

问题是为什么我无法将插入值放入我的数据库中。 (我不确定“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");

1 个答案:

答案 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?