sai.2012 Ответов: 3

Проблема с одинарной кавычкой в наборе данных C#


Я под управлением Oracle запрос и получение данных, хранение его в набор данных(dsDataSet)
Шаг 2: копирование его в datatable.
dtAEDetails= dsDataSet.Таблицы[0]. Копия();)
Шаг 3: сохранение datatable в базе данных access.

У меня есть проблема в datatable, одно поле Desc1 в datatable имеет одинарную кавычку(ex:
'SCHOLAR'S EDGE THE AGGR P'


Код ниже вставить таблицу в базе данных Access.
если datatable rows > 0, то вставка в базу данных access.
Поле DESC1 имеет одинарную кавычку, как заменить одинарную кавычку двойной кавычкой перед вставкой в базу данных.
if (dtAEDetails.Rows.Count > 0)
               {
                   //Set up the params
                   foreach (DataRow drAEDetails in dtAEDetails.Rows)
                   {
                       sInsertValues =
                            "'" + drAEDetails["OFFICE"].ToString() + "','"
                                + drAEDetails["AE"].ToString() + "','"<pre> if (dtAEDetails.Rows.Count > 0)
               {
                   //Set up the params
                   foreach (DataRow drAEDetails in dtAEDetails.Rows)
                   {
                       sInsertValues =
                            "'" + drAEDetails["OFFICE"].ToString() + "','"
                                + drAEDetails["AE"].ToString() + "','"
                                + drAEDetails["SETDATE"].ToString() + "','"
                                + drAEDetails["ACCT"].ToString() + "','"
                                + drAEDetails["SHORT"].ToString() + "','"
                                + drAEDetails["BS"].ToString() + "','"
                                + drAEDetails["SHARES"].ToString() + "','"
                                + drAEDetails["DESC1"].ToString()+ "','"
                                + drAEDetails["PRICE"].ToString() + "','"
                                + drAEDetails["PRINC"].ToString() + "','"
                                + drAEDetails["GROSS"].ToString() + "','"
                                + drAEDetails["STAND"].ToString()  + "','"
                                + drAEDetails["NET"].ToString()  + "','"
                                + drAEDetails["NEWNET"].ToString() + "','"
                                + drAEDetails["AECHG"].ToString()+ "','"
                                + drAEDetails["BONUS"].ToString()+ "','"
                                + drAEDetails["BT"].ToString() + "','"
                                + drAEDetails["CANCEL"].ToString() + "','"
                                + drAEDetails["TRANSCODE"].ToString() + "','"
                                + drAEDetails["ORDERSORT"].ToString() + "','"
                                + drAEDetails["REALGR"].ToString() + "','"
                                + drAEDetails["ANNUITYNET"].ToString() + "','"
                                + drAEDetails["RECORDID"].ToString() + "','"
                                + drAEDetails["USER_CODE_1"].ToString() + "','"
                                + drAEDetails["USER_CODE_7"].ToString() + "'";


                       insertAEdetails.ParmValue = sInsertValues;
                       insertAEdetails.InsertIntoAccess();

как заменить одинарную кавычку в двойную кавычку в поле desc и сохранить ее в dataset, после замены я хочу сохранить ее в datatable . как это сделать.

Пожалуйста, веди меня.

Спасибо

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

Я думал о замене в запросе, но мой коллега сказал, что это легко в коде.

не могли бы вы дать мне идею?

3 Ответов

Рейтинг:
2

Dave Kreskowiak

Вы не заменяете одинарную кавычку. Вы меняете код обработки базы данных,который, вероятно, написан с использованием конкатенации строк, на использование параметризованных запросов.

Google для "атаки SQL-инъекций", чтобы узнать, почему то, что вы делаете, так плохо. Затем Google для "C# parameterize query", чтобы узнать, как это исправить.


Рейтинг:
0

OriginalGriff

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

И первое, что вам нужно сделать, это исправить все остальные запросы в вашем приложении: оставьте там только один, и вам лучше убедиться, что у вас есть хорошие, надежные, частые резервные копии вашей БД, потому что вы будете часто восстанавливать ее...


Рейтинг:
0

Patrice T

Ваша проблема - это очень популярная проблема SQL-инъекции.

Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь уязвимости под названием "SQL injection", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа рухнет. Если пользователь вводит имя типа "Брайан О'Коннер", это может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция-Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL Injection-руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL-OWASP[^]