Member 13583863 Ответов: 1

Необработанное исключение типа "system.data.oledb.oledbexception" произошло в system.data.dll


DataTable dt = новый DataTable();
OleDbConnection conn = GetConnectionMDB1();
Объект oledbdataadapter да = новый объект oledbdataadapter("выбрать различные срно,EntryDate,EntryTime,EmpCode от AttenInfo", соед);
да.Заполнить(ДТ);
int TotalRow = dt.Rows.Рассчитывать;
string[] res = новая строка[TotalRow];
for (int i = 0; i < TotalRow; i++)
{
OleDbConnection conn1 = GetConnectionMDB2();
OleDbCommand cmd = новая OleDbCommand();
УМК.Свойство Commandtype = Значение Commandtype.Текст;
УМК.Соединение = conn1;
DataTable dt2 = новый DataTable();
Объект oledbdataadapter Да2 = новый объект oledbdataadapter("Select * из AttenInfo где EntryDate =формат('" + ДТ.Строки[Я][1].Метод toString().Подстрока(0, 10) + "', 'ДД/ММ/гггг') и EntryTime='" + ДТ.Строки[я][2].ToString() + "' и srno=" + dt.Rows[i][0].ToString() + " и EmpCode='" + dt.Rows[i][3].ToString()+"'", conn1);
Да2.Заполнить(ст2);

}

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

Я взял данные из одного MDB, чтобы вставить данные в другие данные, чтобы избежать дублирования данных, но через некоторое время произошла эта ошибка.

1 Ответов

Рейтинг:
2

OriginalGriff

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

Когда вы объединяете строки, вы вызываете проблемы, потому что SQL получает такие команды, как:

SELECT * FROM MyTable WHERE StreetAddress = 'Baker's Wood'
Цитата, добавленная пользователем, завершает строку в том, что касается SQL, и вы получаете проблемы. Но могло быть и хуже. Если я приду и наберу вместо этого: "x';DROP TABLE MyTable;--", то SQL получит совсем другую команду:
SELECT * FROM MyTable WHERE StreetAddress = 'x';DROP TABLE MyTable;--'
Которые SQL видит как три отдельные команды:
SELECT * FROM MyTable WHERE StreetAddress = 'x';
Совершенно правильный выбор
DROP TABLE MyTable;
Вполне допустимая команда "удалить таблицу"
--'
А все остальное-это комментарии.
Так оно и происходит: выбирает любые совпадающие строки, удаляет таблицу из базы данных и игнорирует все остальное.

Поэтому всегда используйте параметризованные запросы! Или будьте готовы часто восстанавливать свою БД из резервной копии. Вы ведь регулярно делаете резервные копии, не так ли?

Исправьте это, и есть вероятность, что ваша другая проблема исчезнет в то же самое время.