在Access数据库上运行多个更新查询的更有效方法?

时间:2014-07-15 23:25:50

标签: c# ms-access

我现在有多个这样的查询,涉及更新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();

我想知道是否有更有效的方式来运行这些更新查询 - 即。将它们组合成一个查询。

1 个答案:

答案 0 :(得分:4)

上面的上下文中不需要使用OleDbDataAdapter。您可以使用简单的命令并执行它

说,Update 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时唯一要保持的是参数按参数占位符出现在命令文本中的确切顺序使用。因此,它们应按命令文本

所需的顺序添加到参数集合中