GBase ADO.NET 中的事务
GBase ADO.NET 中支持事务,可以使用 GBaseConnection 对象的 BeginTransaction 函数开始一个事务,并默认使用 ReadCommitted 模式初始 化。 事务中可以对单个表执行多个操作,或者对多个表执行多个操作,在事务 未提交前,事务中的这些命令执行后并不是真正的影响数据库记录。当调用 BeginTransaction 返回对象的 commit 方法时,才会真正的影响记录。
5.4.1 在GBase ADO.NET中使用事务
在 GBase ADO.NET 使用事务时需下列步骤:
1) 使用 GBaseConnection 创建数据库连接对象
2) 使用 GBaseCommand 创建命令对象
3) 使用连接对象打开连接
4) 使用连接对象的 BeginTransaction 开启事务,返回事务对象
5) 将命令对象与连接对象及事务对象关联
6) 命令对象对表进行一些操作
7) 执行事务对象的提交方法
8) 命令对象执行失败后,执行事务对象的回滚方法 下面的例子展示在 GBase ADO.NET 中如何使用事务。
[ C# ] using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using GBase.Data; using GBase.Data.GBaseClient; using System.Diagnostics; namespace UsingStoredRoutines { class Program { static void Main(string[] args) { GBaseConnection _Conn = new GBaseConnection(); _Conn.ConnectionString = "server=192.168.5.41;user=root;database=test;password=1;pooling=fals e"; GBaseCommand _Cmd = new GBaseCommand(); GBaseTransaction _Trans = null;try { Console.WriteLine("Connecting to GBase..."); _Conn.Open(); _Trans = _Conn.BeginTransaction(); _Cmd.Connection = _Conn; _Cmd.Transaction = _Trans; // 在 GBase 8a 集群下需显示关闭自动提交模式 // _Cmd.CommandText = "set autocommit = false"; / _Cmd.ExecuteNonQuery(); _Cmd.CommandText = "insert into `test`(`f_varchar`) values('111')"; _Cmd.ExecuteNonQuery(); _Cmd.CommandText = "insert into `test`(`f_varchar`) values('222')"; _Cmd.ExecuteNonQuery(); _Trans.Commit(); Console.WriteLine("Transaction has committed."); } catch (GBaseException ex) { _Trans.Rollback(); Console.WriteLine("Error " + ex.Number + " has occurred: " + ex.Message); } finally { if (_Conn != null) _Conn.Close(); Console.WriteLine("None."); } } } }




