【发布时间】:2011-05-20 03:36:57
【问题描述】:
我需要在我的 c# 应用程序中使用一些代码来使用 Microsoft Access 数据库实现事务
【问题讨论】:
-
您的问题是什么?你试过什么?
我需要在我的 c# 应用程序中使用一些代码来使用 Microsoft Access 数据库实现事务
【问题讨论】:
OleDbTransaction 类就是为此而生的。您可以通过在 OleDbConnection 对象上调用 BeginTransaction 然后提交或回滚到您的方案来创建一个
using (var transaction = cn.BeginTransaction()) {
//Do Stuff here using the connection
transaction.Commit();
}
如果没有调用提交,事务将在处置时回滚。
【讨论】:
尝试实现类似于下面的代码。
public void InsertPersonAndPhoneNumber(int personId, string name, string phone)
{
string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=./contacts.accdb";
OleDbConnection cn = new OleDbConnection(connectionString);
try
{
cn.Open();
OleDbTransaction trans = cn.BeginTransaction();
try
{
//first transaction ...
string sql1 = "INSERT INTO People (ID, pname) VALUES (@ID, @pname)";
OleDbCommand cmd1 = new OleDbCommand(sql1, cn, trans);
cmd1.Parameters.AddWithValue("@ID", personId);
cmd1.Parameters.AddWithValue("@pname", name);
cmd1.ExecuteNonQuery();
//first transaction ...
string sql2 = "INSERT INTO PhoneNumbers (PID, num) VALUES (@PID, @num)";
OleDbCommand cmd2 = new OleDbCommand(sql2, cn, trans);
cmd2.Parameters.AddWithValue("@PID", personId);
cmd2.Parameters.AddWithValue("@num", phone);
cmd2.ExecuteNonQuery();
trans.Commit();
Console.WriteLine("New Contact Added successfully ...");
}
catch (Exception x)
{
//handle exception ....
trans.Rollback();
Console.WriteLine(x.Message);
}
finally
{
cn.Close();
}
}
catch (Exception x)
{
//handle exception ....
}
}
【讨论】:
{} 按钮制作正确的代码块。