【问题标题】:create a transaction for MS Access in c#在 C# 中为 MS Access 创建一个事务
【发布时间】:2011-05-20 03:36:57
【问题描述】:

我需要在我的 c# 应用程序中使用一些代码来使用 Microsoft Access 数据库实现事务

【问题讨论】:

  • 您的问题是什么?你试过什么?

标签: c# ms-access


【解决方案1】:

OleDbTransaction 类就是为此而生的。您可以通过在 OleDbConnection 对象上调用 BeginTransaction 然后提交或回滚到您的方案来创建一个

using (var transaction = cn.BeginTransaction()) {
  //Do Stuff here using the connection
  transaction.Commit();
}

如果没有调用提交,事务将在处置时回滚。

【讨论】:

    【解决方案2】:

    尝试实现类似于下面的代码。

        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 .... 
    
            }
    
        }
    

    【讨论】:

    • 您好 Kingstone,感谢您的贡献。您可能想要编辑您的答案并解决代码块格式问题。删除多余的空格(在末尾和中间)。有时将代码粘贴到记事本中会更容易,删除多余的东西,然后将其包装成三重 `
    • @LanceMcCarthy 你说得对,这需要清理,但请记住,Stack Overflow 没有对代码块使用三重栅栏,而是使用 4 个空格。请建议使用{} 按钮制作正确的代码块。
    • @Ajean 已确认!
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多