Используйте класс для извлечения данных и обновления таблицы БД
#Первый раз
я пытаюсь использовать функцию-член класса для извлечения данных или обновления таблицы с помощью datatable, но при вызове я получаю ошибку NULLReference.
Что я уже пробовал:
here is my code, constring is kept private global <pre lang="c#">public void retrieveFromDB(int proID) { string selectcmd = "SELECT * FROM [store].[dbo].[tblproduct] WHERE [proID]='" + proID + "'"; SqlConnection con = new SqlConnection(constring); con.Open(); SqlCommand select = new SqlCommand(selectcmd, con); SqlDataAdapter sda = new SqlDataAdapter(select); sda.Fill(table); con.Close(); }
звонок с главного
productTbl protbl = null; protbl.retrieveFromDB(1); protbl.updatestock(proID, protbl.getStockInHand(proID) - quantity);
выдает ошибку даже после комментирования
public void retrieveFromDB(int proID) { string selectcmd = "SELECT * FROM [store].[dbo].[tblproduct] WHERE [proID]='" + proID + "'"; SqlConnection con = new SqlConnection(constring); con.Open(); //SqlCommand select = new SqlCommand(selectcmd, con); //SqlDataAdapter sda = new SqlDataAdapter(select); //sda.Fill(table); con.Close(); }
Richard Deeming
НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]
В этот конкретный экземпляр, так как параметр был проанализирован как int
- он не может быть использован для совершения каких-либо злонамеренных действий. Но использование конкатенации строк-это плохая привычка, и нет ничего, что помешало бы будущему сопровождающему изменить параметр на a string
и вскрытие серьезной дыры в системе безопасности вашего проекта.
Сделать это правильно не так уж и сложно:
using (SqlConnection con = new SqlConnection(constring)) using (SqlCommand command = new SqlCommand("SELECT * FROM [store].[dbo].[tblproduct] WHERE [proID] = @proID", con)) { command.Parameters.AddWithValue("@proID", proID); SqlDataAdapter sda = new SqlDataAdapter(command); sda.Fill(table); }