Более эффективный способ выполнения нескольких запросов на обновление базы данных Access?

1

У меня есть несколько запросов, подобных этому прямо сейчас, которые включают обновление различных полей одной и той же строки в базе данных Access:

//Update database
string updatequery = "UPDATE [table] SET [Last10Attempts] = ? WHERE id = ?";
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;" + @"Data Source=" + "database.accdb");
con.Open();
OleDbDataAdapter da = new OleDbDataAdapter(updatequery, con);

var accessUpdateCommand = new OleDbCommand(updatequery, con);
accessUpdateCommand.Parameters.AddWithValue("Last10Attempts", last10attempts);
accessUpdateCommand.Parameters.AddWithValue("ID", currentid + 1);
da.UpdateCommand = accessUpdateCommand;
da.UpdateCommand.ExecuteNonQuery();

//update last10attemptssum
updatequery = "UPDATE [table] SET [Last10AttemptsSum] = ? WHERE id = ?";
accessUpdateCommand = new OleDbCommand(updatequery, con);
accessUpdateCommand.Parameters.AddWithValue("Last10AttemptsSum", counter);
accessUpdateCommand.Parameters.AddWithValue("ID", currentid + 1);
da.UpdateCommand = accessUpdateCommand;
da.UpdateCommand.ExecuteNonQuery();

//increment totalquestionattempt
updatequery = "UPDATE [table] SET [total-question-attempts] = ? WHERE id = ?";
accessUpdateCommand = new OleDbCommand(updatequery, con);                            
accessUpdateCommand.Parameters.AddWithValue("total-question-attempts", questionattempts + 1);
accessUpdateCommand.Parameters.AddWithValue("ID", currentid + 1);
da.UpdateCommand = accessUpdateCommand;
da.UpdateCommand.ExecuteNonQuery();

con.Close();

Мне было интересно, есть ли более эффективный способ запуска этих запросов на обновление - т.е. объединяя их в один запрос.

Теги:
ms-access

1 ответ

4
Лучший ответ

В вашем контексте нет необходимости использовать OleDbDataAdapter. Вы можете использовать простую команду и выполнить ее

Сказал, что в обновлении sql-оператора может быть обновлено более одного поля. Просто пиши

 string updatequery = @"UPDATE [table] SET [Last10Attempts] = ?, 
                                           [Last10AttemptsSum] = ?,
                                           [total-question-attempts] = ?
                              WHERE id = ?";
 using(OleDbConnection con = new OleDbConnection(.........))
 using(OleDbCommand cmd = new OleDbCommand(updatequery, con))
 {
     con.Open();
     cmd.Parameters.AddWithValue("Last10Attempts", last10attempts);
     cmd.Parameters.AddWithValue("Last10AttemptsSum", counter);
     cmd.Parameters.AddWithValue("total-question-attempts", questionattempts + 1);
     cmd.Parameters.AddWithValue("ID", currentid + 1);
     cmd.ExecuteNonQuery();
 }

Единственное, что нужно сохранить при работе с OleDb, это тот факт, что параметры используются в точном порядке, в котором заполнитель параметров появляется в тексте команды. Поэтому их следует добавить в коллекцию параметров в порядке, ожидаемом в тексте команды

  • 0
    Исправлена пара пропущенных запятых и удалена лишняя скобка

Ещё вопросы

Сообщество Overcoder
Наверх
Меню