JavadUrmu Ответов: 1

Как я могу обновить таблицу базы данных SQL в C#


Когда я запускаю свою программу, она показывает следующее сообщение об ошибке :

Динамическая генерация SQL для команды Update не поддерживается для команды SelectCommand, которая не возвращает никакой информации о ключевом столбце.'


ну , я попытался изменить код, так что если я изменюсь на этот:

ДТ.Метод acceptchanges();
да.Обновление(ДТ);

он не показывает сообщение об ошибке, но изменения не были внесены в базу данных.
Пожалуйста, помогите мне.

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

using (SqlConnection dbcon = new SqlConnection(clsmain.connection_str))
{
string querystring = "select * from tblmain where ticker='" + ticker_str + "'";
использование (SqlDataAdapter da = новый SqlDataAdapter())
{
da.SelectCommand = new SqlCommand(querystring, dbcon);
SqlCommandBuilder objCommandBuilder = новый SqlCommandBuilder(da);
using (DataTable dt = new DataTable())
{
if (dbcon.Состояние == ConnectionState.Закрыто) dbcon.Открыть();
инт countofrecords = да.Заполнить(ДТ);
.
. // мой код для изменения данных находится здесь
. // например::
. // dt.Rows[i]["avgloss"]=10.22;
.
if (dbcon.Состояние == ConnectionState.Закрыто) { dbcon.Открыть(); }
да.Обновление(ДТ);
}
}
}

Richard Deeming

string querystring = "select * from tblmain where ticker='" + ticker_str + "'";

Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.

Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов | OWASP[^]

1 Ответов

Рейтинг:
0

Dave Kreskowiak

Вы используете "SELECT *" в своей команде SelectCommand. НЕ ДЕЛАЙТЕ ЭТОГО. Выпишите каждый столбец, который вы хотите, убедившись, что вы также возвращаете столбец первичного ключа таблицы, в которой вы выполняете SELECT on.

Без прописанных столбцов и столбца первичного ключа в этом списке SqlCommandBuilder не может построить инструкции INSERT, UPDATE и DELETE SQL для этих операций.