Asyraf Patt Ответов: 3

C# winform : добавление ценности к доступу к базе данных


есть ли какое-либо решение помимо этого кода, которое мы можем реализовать, чтобы добавить ценность в базу данных ? это более безопасно, чем приведенный ниже код.

Что я уже пробовал:

OleDbCommand cmd = con.CreateCommand();    
    con.Open();    
    cmd.CommandText = "Insert into Student(FirstName,LastName)Values('" + textBox1.Text + "','" + textBox2.Text + "')";    
    cmd.Connection = con;    
    cmd.ExecuteNonQuery();    
    MessageBox.Show("Record Submitted","Congrats");    
    con.Close();   

3 Ответов

Рейтинг:
21

Thomas Daniels

Да: вместо конкатенации строк используйте параметризованные запросы:

OleDbCommand cmd = new OleDbCommand("Insert into Student(FirstName,LastName)Values(@FirstName,@LastName)", con);
cmd.Parameters.AddWithValue("@FirstName", textBox1.Text);
cmd.Parameters.AddWithValue("@LastName", textBox2.Text);

Преимущества этого:

  • Это легче читать: здесь меньше кавычек, которые можно перепутать, поэтому здесь сложнее иметь синтаксическую ошибку.
  • Ваш исходный код имеет SQL-инъекция[^] уязвимость, которая закрывается с помощью параметризованных запросов.


Рейтинг:
17

OriginalGriff

Не делай этого так! Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.

Вы также должны использовать try ... catch блок вокруг вашего кода БД, и либо finally блок для закрытия и утилизации Command и Connection объекты, или using блоки, чтобы сделать это автоматически.


Рейтинг:
0

Kornfeld Eliyahu Peter

Прежде всего, никогда не используйте конкатенацию строк для создания запроса. Определенный пользовательский ввод может очень сильно навредить вам... xkcd: подвиги мамы[^]
Это не ясно из вашего кода, но если вы этого не сделаете, то добавьте имя пользователя и пароль к вашему соединению...