VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 898|回复: 9

关于事务处理问题

[复制链接]

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-21 14:40:01 | 显示全部楼层 |阅读模式
我定了一个函数用于事务处理,不知怎么一直报这个错,请哪位大侠指正一下,
public bool updateDataBaseWithTran(string tempstr,string connstr)
{
this.Conn=new SqlConnection(connstr);
Conn.Open();
SqlTransaction tx=Conn.BeginTransaction();

SqlCommand tempCmd=new SqlCommand();
tempCmd.Connection=Conn;
tempCmd.CommandType=CommandType.Text;
tempCmd.CommandText=tempstr;
try
{
     tempCmd.ExecuteNonQuery();
     tx.Commit();
     Conn.Close();
     return true;
}
catch(Exception ex)
{
        tx.Rollback();
        MessageBox.Show(ex.Message);
        return false;
}
}

错误为:
当分配给本地的连接处于挂起的本地事务时,命令必须具有事务对象才能执行。该命令的TRansaction属性尚未初始化。
回复

使用道具 举报

1

主题

16

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-2-1 07:45:01 | 显示全部楼层
SqlTransaction tx=Conn.BeginTransaction();

SqlCommand tempCmd=new SqlCommand();

改为
SqlCommand tempCmd=new SqlCommand();
SqlTransaction tx=Conn.BeginTransaction();
回复

使用道具 举报

1

主题

2

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-2-1 15:27:01 | 显示全部楼层
不对,改过还是报同样的错误!
回复

使用道具 举报

0

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-2-2 14:45:02 | 显示全部楼层
将程序做一下修改:
SqlTransaction tx=null;
using (tx= Conn.BeginTransaction())
{
   SqlCommand tempCmd=new SqlCommand();
tempCmd.Connection=Conn;
tempCmd.CommandType=CommandType.Text;
tempCmd.CommandText=tempstr;
try
{
     tempCmd.ExecuteNonQuery();
     tx.Commit();
     Conn.Close();
     return true;
}
catch(Exception ex)
{
        tx.Rollback();
        MessageBox.Show(ex.Message);
        return false;
}
}
回复

使用道具 举报

0

主题

32

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-2-4 12:45:02 | 显示全部楼层
出错信息不说了吗。
SqlCommand.Transaction没设
回复

使用道具 举报

0

主题

32

帖子

22.00

积分

新手上路

Rank: 1

积分
22.00
发表于 2020-2-4 15:30:01 | 显示全部楼层
tempCmd.Connection=Conn;
tempCmd.Transaction=Conn.BeingTransaction();
回复

使用道具 举报

0

主题

15

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-2-14 18:45:01 | 显示全部楼层
using System.Transaction;

xxxTableAdapter xxxTA = new xxxTableAdapter();

using (TransactionScope ts = new TransactionScope)
{
     xxxTA.Insert("aa","bb","cc");
     xxxTA.Update("dd","ee","mm","cc");

     
     ts.Complete(); //完成transaction,成功就写,不然自动回滚.

}
改用.net 2.0吧..方便的很
回复

使用道具 举报

1

主题

16

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-2-17 22:15:01 | 显示全部楼层
汗,才发现楼主你忘了一关键东西,你的CommandText不是查询操作吧?
需要加一句:
tempCmd.Transaction=tx;
这下肯定对了
回复

使用道具 举报

1

主题

16

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-2-17 23:45:01 | 显示全部楼层
因为你这个连接已经被事务占了,所以所有非查询操作都应该带着这个事务来执行
回复

使用道具 举报

0

主题

110

帖子

63.00

积分

新手上路

Rank: 1

积分
63.00
发表于 2020-3-1 19:15:01 | 显示全部楼层
SqlTransaction tx=Conn.BeginTransaction();

SqlCommand tempCmd=new SqlCommand();
tempCmd.Connection=Conn;
tempCmd.CommandType=CommandType.Text;
tempCmd.CommandText=tempstr;
//加这样一句..
tempCmd.Transaction=tx;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表