planetz Ответов: 1

Вставка нескольких строк за один раз и ни одна строка не вставляется, если есть проблема


Всем Привет,

Я хочу вставить несколько строк в таблицу при нажатии кнопки.
Процесс, который я использовал, проходит через каждую строку gridview и вставляет данные в таблицу. Но если есть какая-то проблема между процессами, то половина строк вставляется, а половина-нет. Но это должно быть либо все строки вставлены, либо ни одной.
Я не могу придумать, как этого добиться. Кто-нибудь может помочь с какой-нибудь идеей? Я использую access 2013 с asp.net.

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

На данный момент это мой код.

foreach (GridViewRow row in grid_score.Rows)
            {
                string revw_date = DateTime.Today.ToString();
                string emp_fname = row.Cells[0].Text;
                string emp_lname = row.Cells[1].Text;
                string revwr_name = row.Cells[6].Text;
                string intscore = row.Cells[8].Text;

                //insert into score table
                sql = "INSERT INTO TABLENAME VALUES('" + revw_date + "',(SELECT EMP_ID FROM USER_DETAIL WHERE FIRST_NAME='" + emp_fname + "' AND LAST_NAME='" + emp_lname + "'),(SELECT REVIEWER_ID FROM USER_DETAIL WHERE REVIEWER_NAME='" + revwr_name + "')," + intscore + ")";

                OleDbCommand cmd = new OleDbCommand(sql, conn);
                int count = cmd.ExecuteNonQuery();

                if (count == 1)
                {
                    System.Web.UI.ScriptManager.RegisterStartupScript(this, GetType(), "displayalertmessage", "alert('Data inserted successfully');", true);
                }
                else
                {
                    System.Web.UI.ScriptManager.RegisterStartupScript(this, GetType(), "displayalertmessage", "alert('Sorry! Data cannot be submitted. Try again.');", true);
                }
}

Как видно из кода, сообщение об успехе будет отображаться каждый раз, когда будет вставлена строка. Этого не должно быть дела.

OriginalGriff

Существует решение, встроенное во все системы БД: транзакции.

1 Ответов

Рейтинг:
1

OriginalGriff

Использование транзакции: В Oledbtransaction Класса (Система.Данных.Для oledb)[^]- Вы создаете его в самом начале, делаете свои обновления, и если что-то не удается, вы используете откат, чтобы отменить их все. В противном случае вы фиксируете транзакцию и закрываете соединение.

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