编程语言C#,数据库ACCESS,如何支持事务
比如我要对数据库操作,必须分两步实现,在第一步插入成功得情况下,第二步却报错,用编程该如何回滚?
我想得方式是:在判断第二步报错得情况下,编一段程序把第一步得操作删掉,但在有很多用这种方式得情况下需要增加很大得工作量。请问有没有更好得方法?

解决方案 »

  1.   

    access好像不支持 事务不过你用oledbconnnection连接上数据库,然后conn.begintran 返回一个事务,然后你在提交事务或者回滚事务中午有时间我试试看,没用过access作事务处理过
      

  2.   

    楼上说的对,用oledbconnnection的事务。
      

  3.   

    Access不支持事务的,楼上的表乱讲
      

  4.   

    测试代码如下:加上注释掉的语句,就over了。
    try
    {
    this.oleDbConnection1.Open ();
    //System.Data.OleDb.OleDbTransaction tr = this.oleDbConnection1.BeginTransaction();
    //tr.Begin(); System.Data.OleDb.OleDbCommand c = new System.Data.OleDb.OleDbCommand("insert into a values('a','b')",this.oleDbConnection1);
    //c.Transaction = tr;
    c.ExecuteNonQuery();
    //tr.Commit();
    }
    catch(System.Data.OleDb.OleDbException ex)
    {
    MessageBox.Show(ex.Message);
    }
      

  5.   

    Access 支持事务的 ,请 Sunmast(速马/MVP) 表乱讲
      

  6.   

    用access2K 以上的都支持事务BEGIN TRANSACTION
           
    COMMIT
      

  7.   

    楼主的Sunmast(速马/MVP)人等Access支持事务!!!!谁说不支持,我从VB时代就开始用了,到.net时代,access一样支持事务!用OleDbConnection的事务
      

  8.   

    http://bbs.mscommunity.com/Forums/PrintThread.aspx?PostID=2307
    可以
      

  9.   

    http://support.microsoft.com/default.aspx/kb/222135
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnacc2k/html/acmsdeop.asp
    http://www.microsoft.com/technet/prodtechnol/sbs/45/reskit/part9/sbrk0945.mspxUse Jet if: You want the highest compatibility with Access 97 or earlier. 
    Your environment has a small number of simultaneous users. 
    You have very low resources, such as memory or disk. 
    Ease of use is a primary concern. Use MSDE if: You want to develop from a single code base, from a single user to thousands of users. 
    You expect a future need for greater scalability. 
    You require easy merge replication with the central server. 
    You need the best security. 
    You need great reliability, such as transaction logging. 
    Your system is online 24 hours a day, 7 days a week. 
    You need stored procedures and triggers.
      

  10.   

    代码错误,当然不能回滚了,我改了一下,楼主再试一下
    关键是没有回滚代码。this.oleDbConnection1.Open ();
    System.Data.OleDb.OleDbTransaction tr=this.oleDbConnection1.BeginTransaction();
    tr.Begin();
    try
    {
    System.Data.OleDb.OleDbCommand c = new System.Data.OleDb.OleDbCommand("insert into a values('a','b')",this.oleDbConnection1);
    c.Transaction = tr;
    c.ExecuteNonQuery();
    tr.Commit();
    }
    catch(System.Data.OleDb.OleDbException ex)
    {
    tr.Rollback();
    MessageBox.Show(ex.Message);
    }
      

  11.   

    access97之前的数据不知道,没测过,没有access97//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //access2000以后的数据支持事务!!!!!!!!!!!!!
    //________________________________________请楼上的把MVP马甲脱了吧,还有那些叫着"绝对不支持的"反省一下!测试
    1) 新建一个数据库 c:\test.mdb;
    2) 新建一个表 testTable,包括两个数字字段 ID, TestValue;
    3) 新建一个窗体,加入如下代码测试一下string dbFileName = @"c:\test.mdb";

    string link = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + dbFileName + ";User Id=admin;Password=;";
    string sqlTran   = "insert into testTable(ID,testValue) values(1,555)";
    string sqlNoTran = "insert into testTable(ID,testValue) values(2,666)";
                
    OleDbConnection cn = new OleDbConnection(link);
    OleDbCommand cmd = new OleDbCommand(sqlTran, cn); cn.Open();
    OleDbTransaction tran = cn.BeginTransaction();
    cmd.Transaction = tran;
                cmd.ExecuteNonQuery();
    tran.Rollback();
    //Rollback后,数值 1,555未被插入数据库, cmd.CommandText = sqlNoTran;
    cmd.ExecuteNonQuery();
    //数据2,666已正确插入数据库
    cn.Close();
      

  12.   

    鼎鼎兄的代码是"acess支持回滚"吗?acess数据库本身应该不支持事务的,你是通过OleDbConnection来支持事务的啊。
      

  13.   

    正如 lyb_abiandbel(渴望成为高手) 说的sql server 和 oracle 也不支持事务的,都是通过OleDbConnection来支持事务。
      

  14.   

    关于此主题请参考:
        关于事务处理《查询》
        http://access911.net/index.asp?u1=a&u2=73FABF1E14DC
    关于此主题请参考:
        《查询》什么是事务处理?怎么进行事务处理?
        http://access911.net/index.asp?u1=a&u2=71FABE1E13DC
    jet db 4.0 就开始支持事务处理了
      

  15.   

    关于此主题请参考:
        如何获取当前数据库jet db版本?《VBA》
        http://access911.net/index.asp?u1=a&u2=75FAB51E15DC
      

  16.   

    MDAC是什么?在哪里下载?包含什么?
     作者:cg1  摘自:access911.net  编辑:cg1  更新日期:2003-3-11  浏览人次:929
     
    专题地址:
    http://access911.net/?kbid;72FABF1E14DC
     
     简述:
    《发布》MDAC是什么?在哪里下载?包含什么? 阅读前需掌握:
    基本了解 MDAC ADO JETDB
     难度等级:
    10 
       
     
     Microsoft Data Access Components 2.8http://msdn.microsoft.com/library/default.asp?url=/downloads/list/dataaccess.asp
    地址有所更新:
    http://msdn.microsoft.com/data/downloads/updates/default.aspx#MDAC
    http://msdn.microsoft.com/data/mdac/downloads/default.aspx
    http://www.microsoft.com/downloads/details.aspx?familyid=78cac895-efc2-4f8e-a9e0-3a1afbd5922e&displaylang=enADO / ADOX / JRO 是 MDAC 中的一部分,也要到上述地址下载
    Microsoft Data Access Components 2.7 download:http://msdn.microsoft.com/library/default.asp?url=/nhp/Default.asp?contentid=28001860注意:mdac2.6和其后续版本已经不包括jetdb得升级包了,如果要下载安装最新的jet db4.0请看以下地址:
    http://support.microsoft.com/default.aspx?scid=kb;zh-cn;239114