用Oledb方式同时连接MS-SQL和Sybase时分布式事务TransactionScope的相关问题
先说下小弟的问题:
最近的一个项目需要和第三方做一个接口,第三方的数据库是sybase,版本还比较老,11.9的,所以Ado.net的驱动没成功,后来用了Oledb的方式连接是没什么问题了,现在遇到的问题是想用分布式事务的方式来实现回滚操作,但是一直不成功;
我原本的想法是如下:
using (TransactionScope scope = new TransactionScope()) { bool aaa = InsertMySQLServer(); //插入我方的MS-SQL数据库 bool bbb = InsertSybaseServer(); //插入对方的Sybase数据库 if (aaa && bbb) { scope.Complete(); } }
OleDbConnection Conn = new OleDbConnection("Provider=Sybase.ASEOLEDBProvider;Srvr=ip,5000;Catalog=databasename;User Id=username;Password=password"); Conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = Conn; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "myProcedure"; DataTable ds = new DataTable(); OleDbParameter menu = new OleDbParameter("menu", OleDbType.Char); menu.Direction = ParameterDirection.Input; menu.Value = "yltest888"; cmd.Parameters.Add(menu); //省略参数若干 OleDbParameter ret = new OleDbParameter("ret", OleDbType.Integer, 4); ret.Direction = ParameterDirection.ReturnValue; ret.Value = 0; cmd.Parameters.Add(ret); OleDbParameter msg = new OleDbParameter("msg", OleDbType.Char, 50); msg.Direction = ParameterDirection.ReturnValue; msg.Value = ""; cmd.Parameters.Add(msg); int result = cmd.ExecuteNonQuery(); string aaa = msg.Value.ToString(); string bbb = ret.Value.ToString();