挂起事务中. 关于SqlTransaction

珠海_黄公子 2007-05-15 12:14:11
大家好!


问题..出错: 如果分配给命令 的连接位于本地挂起事务中,ExecuteReader要求拥有事务.命令的Transaction属性尚未初始化.
...全文
2266 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
fightingthefuture 2010-12-07
  • 打赏
  • 举报
回复
就是先判断一下 cmd.ExecuteNonQuery(); 这个的返回值 如果是这个值是 符合数据库要求 那么就提交,否则就回滚
fightingthefuture 2010-12-07
  • 打赏
  • 举报
回复
我今天也遇到这样的问题 !!最后我解决的方法是没有提交事务
你的事务提交的时候不对
try
{
....................
cmd.executenonquery();
......................
cmd.ExecuteNonQuery();
ston.commit();
}
catch()
{
ston.RollBack();
}
finally
{
conn.close();
}


这是你的代码
试试看把ston.commit(); 放在try{} catch{} finally{} 后面
BadTree 2010-07-02
  • 打赏
  • 举报
回复
虽然这个问题已经是很久前的,但都要回答一下,让后来的学习的人能够知道原因。

其实这个错误原因很简单,当你的Command对象要调用一个Transaction(事务),那么你的这个事务必须先初始化后,再赋值给Command对象的Transaction属性;

初始化语句一般为:

SqlTransaction trans;
trans = conn.BeginTransaction(IsolationLevel.ReadCommitted);
止戈而立 2008-07-20
  • 打赏
  • 举报
回复
try
{
....................
cmd.executenonquery();
......................
cmd.ExecuteNonQuery();
ston.commit();
}

问题很可能出在你打省略号的地方,如果你这里有这样的语句:cmd=new SqlCommand()
就会报这样的错误。
你应该使用:cmd.CommandText="Update等语句。。。";
最爱北北 2008-06-11
  • 打赏
  • 举报
回复
我用了dataadapter和dataset,然后又用了command,就出现了上面的错误,是怎么回事啊??
thankyou2008 2008-04-06
  • 打赏
  • 举报
回复
一块 学习学习
相及 2008-03-21
  • 打赏
  • 举报
回复
我才知道事务这个东西。不太清处。不知道有好心朋友能给解说下吗。
mycomm.Transaction = myT特别这句不太明白是什么意思
能给个例子给我吗。带有解说的。最好是用VB写的。谢谢
wcb1@163.COM发到我的邮箱里。谢谢了
北京的雾霾天 2007-05-15
  • 打赏
  • 举报
回复
可能是在你的某个操作中开始了一个事务但没有使用提交或回滚这个事务.
或者你在使用ExecuteReader的Command命令中使用在其它命令中的事务.
珠海_黄公子 2007-05-15
  • 打赏
  • 举报
回复
我已经试过全部都NEW一个新的了...
51Crack 2007-05-15
  • 打赏
  • 举报
回复
实在不行,第二部分再new一个cmd
北京的雾霾天 2007-05-15
  • 打赏
  • 举报
回复
QQ不太好使,真不好意思,我的意见仅参考,是从以前的经验来说.
北京的雾霾天 2007-05-15
  • 打赏
  • 举报
回复
我的意思是如果操作用的是同一个conn的事务,那么当使用这个conn的关联的Command的时候这些Command都要使用这个事务才可以,因为这样才能保证操作的事务是完整的.
珠海_黄公子 2007-05-15
  • 打赏
  • 举报
回复
有QQ吗?加我... QQ:1487844
珠海_黄公子 2007-05-15
  • 打赏
  • 举报
回复
不对哦...你的意思是叫我把第二个事务也写进上面那个事务里吗???
珠海_黄公子 2007-05-15
  • 打赏
  • 举报
回复
hbxtlhx(平民百姓-自已动手,丰衣足食)

你的意思其实我明白... 但是这里已经是按照你说的啦. 同一个SqlConnection

同一个SqlCommand 同一个SqlTransaction

北京的雾霾天 2007-05-15
  • 打赏
  • 举报
回复
那么情况可能是这样的,当你使用conn.BeginTransaction()开始事务后,那么每一个和这个conn相关联的Command都应使用这个事务,如果不使用可能就出这个提示了.你再检查一下是这种情况吗?
珠海_黄公子 2007-05-15
  • 打赏
  • 举报
回复
其实我整个Form1都没有使用过ExecuteReader. 我绝对写了 ston.Commit();还有 RollBack();

简单点说代码类似下面:
Sqlconnection conn=new Sqlconnection(str);
Sqlcommand cmd=conn.CreateCommand();
SqlTransaction ston;
conn.open();
Ston=Conn.BeginTransaction();
cmd.Transaction=ston;
try
{
....................
cmd.executenonquery();
......................
cmd.ExecuteNonQuery();
ston.commit();
}
catch()
{
ston.RollBack();
}
finally
{
conn.close();
}

open();
ston=conn.BeginTransaction();
cmd.Transaction=ston;
try
{
.................
cmd.ExecuteNonQuery();
...................
cmd.ExecuteNonQuery();
ston.commit();
}

catch()
{
Ston.Rollback();
}

finally
{
conn.close();
}

110,533

社区成员

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

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

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