COM+调用事务失败,不知道什么原因

ddggggdd 2004-08-06 01:12:12
我写了一个简单的com+程序是往两个数据库插入记录,用的是com+事务,在非com+程序中相同的语句是好用的,可是在com+程序中打不开数据库连接,
加了几个Console.WriteLine看了一下走到什么地方
结果输出了
5
ccccc

应该是数据库连接没打开,有碰到过这种情况的人吗?
这是为什么呢?
代码如下:


using System;
using System.EnterpriseServices;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;

namespace COMsimple
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
///
[Transaction(TransactionOption.Required)]

public class TxCfgClass : ServicedComponent
{
private static string cnn1 = "workstation id=GAIXZH;packet size=4096;user id=sa;data source=SUPPORT;persist security info=False;initial catalog=CRTEST";
private static string cnn2 = "workstation id=GAIXZH;packet size=4096;user id=sa;data source=SUPPORT;persist security info=False;initial catalog=testcom";
private static string add1 = "insert into users(truename,regname,pwd,sex,email) values('98a','03','22','11','1')";
private static string add2 = "insert into users values('01','02')";

public TxCfgClass(){}

private void ExecSQL(string connect,string sql)
{
System.Data.SqlClient.SqlConnection cnn = new SqlConnection(connect);
System.Data.SqlClient.SqlCommand cmd = cnn.CreateCommand();
cmd.CommandText = sql;
Console.WriteLine("5");
cnn.Open();
Console.WriteLine("6");
cmd.ExecuteNonQuery();
cnn.Close();;
}

public void Add()
{
try
{
ExecSQL(cnn1,add1);
Console.WriteLine("aaaa");
ExecSQL(cnn2,add2);
Console.WriteLine("bbbb");
Console.Read();
ContextUtil.SetComplete();
}
catch(Exception e)
{
ContextUtil.SetAbort();
Console.WriteLine("ccccc");
Console.Read();
}
}
}
}

...全文
192 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
csq0516 2004-08-12
  • 打赏
  • 举报
回复
/ .
' / .- .
. .- .-
./ .--...
.-------- 0 .--
/ .......
' ..
'........ ----
. --..
. .---.. -
分 o . ' -.
分 / '
/ ' ' '
\-分--/....... . ' ' ' '
\ __/ - - -' ' ' '
' ' ' '
o ' ' ' '
' ' '
-..'.----------.
I ----------
/////////.
zilang 2004-08-11
  • 打赏
  • 举报
回复
我也想知道,帮你Up,
ddggggdd 2004-08-07
  • 打赏
  • 举报
回复
up
csq0516 2004-08-06
  • 打赏
  • 举报
回复
up
ddggggdd 2004-08-06
  • 打赏
  • 举报
回复
再顶,就没有人愿意指教吗
ddggggdd 2004-08-06
  • 打赏
  • 举报
回复
to changezhong(小刀)
去掉果然好用,不过事务不同,我该怎么办
liu_z_j 2004-08-06
  • 打赏
  • 举报
回复
[Transaction(TransactionOption.Supported)]
changezhong 2004-08-06
  • 打赏
  • 举报
回复
还有问题,请短信
changezhong 2004-08-06
  • 打赏
  • 举报
回复
加上事务处理后也是能单步的,你可以试试去掉事务,即去掉
[Transaction(TransactionOption.Required)]

ContextUtil.SetComplete();
Console.Read();

通常打不开数据库和TimeOut的原因是由于你的组件注册不正确,或你的程序里面有别的语句将表锁住了,即执行了[Transaction(TransactionOption.Required)]
但却没有
ContextUtil.SetComplete();
Console.Read();

建议有事物的语句单独放在一个类里面,读操作是不需要事务的

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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