Member 10192073 Ответов: 1

Как исправить проблему, когда SQL-запрос содержит специальный символ ' Апостроф в значении столбца предложения where


привет,
Мне нужна помощь, как мы можем исправить проблему, когда мой запрос содержит значение столбца " in

foreach (var item in lstVendorNames)
                {
                    var lstQuery = "select * from Transactions where MasterId not in (Select masterId from BillDetails) and MasterId in (select MasterId from Transactions where Ledger='" + item + "') and Ledger= '" + item + "'";
                    SqlDataAdapter ada = new SqlDataAdapter(lstQuery, CGlobalTally_MT.sqlConnection);
                    DataTable dtvendBill = new DataTable();
                    ada.Fill(dtvendBill);




select * from Transactions where MasterId not in (Select masterId from BillDetails) and MasterId in (select MasterId from Transactions where Ledger='Aerostar's Security Group') and Ledger= 'Aerostar's Security Group'



Мне нужна помощь как это исправить это идет для двух поставщиков

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

Я попытался удалить префикс, но не смог его решить

1 Ответов

Рейтинг:
11

Suvendu Shekhar Giri

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

Либо вы можете создать хранимую процедуру, либо рассмотреть возможность создания параметризованного запроса примерно следующим образом-

var lstQuery = @"select * from Transactions where MasterId not in (Select masterId from BillDetails) and MasterId in (select MasterId from Transactions where Ledger=@Ledger) and Ledger= @Ledger";
SqlCommand cmd = new SqlCommand(lstQuery, CGlobalTally_MT.sqlConnection);
cmd.Parameters.AddWithValue("@Ledger", item);
SqlDataAdapter ada = new SqlDataAdapter(cmd);
DataTable dtvendBill = new DataTable();
ada.Fill(dtvendBill);


Надеюсь, это поможет :)