用Oledb方式同时连接MS-SQL和Sybase时分布式事务TransactionScope的相关问题

xiaoyu_xh 2012-06-07 04:29:14
先说下小弟的问题:

最近的一个项目需要和第三方做一个接口,第三方的数据库是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();
}
}

想通过分布式事务的方式实现完善的回滚解决数据库操作出错时的各种问题,
但是在实际操作过程中程序执行到bool bbb = InsertSybaseServer();
时一直提示:对COM 组件的调用返回了错误 HRESULT E_FAIL
调试机器的Distributed Transaction Coordinator 服务是开启的
其中InsertSybaseServer(); //插入对方Sybase数据库是用Oledb的方式,具体代码如下:

这一段我单独执行时是没问题的,可以成功往对方数据库插入数据

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();


是Oledb不支持分布式事务?还是这里是存储过程不支持?还是其他原因,忘指教
...全文
99 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
justramble 2012-11-01
  • 打赏
  • 举报
回复
顶,顶,更健康呢
xiaoyu_xh 2012-06-07
  • 打赏
  • 举报
回复
自己顶下

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧