程序中使用dbTransation实现事务,为什么不起作用

shjqk 2009-03-24 04:56:33
Database dbTest;
dbTest = DatabaseFactory.CreateDatabase(strConn);
DbCommand dbCommand = dbTest.GetSqlStringCommand("Insert ......");
using (DbConnection conn = dbTest.CreateConnection())
{
conn.Open();
DbTransaction dbTransation = conn.BeginTransaction();
try
{
dbTest.ExecuteNonQuery(dbCommand);
///执行完成就回滚
dbTransation.Rollback();
//直接在这回滚,但还是会保存数据
}

是使用方法有什么不对吗?
...全文
194 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
barenbaojian 2009-08-06
  • 打赏
  • 举报
回复
db.ExecuteNonQuery(dbCommand,dbTransation);这样就没问题了
shjqk 2009-03-24
  • 打赏
  • 举报
回复
我加了
dbCommand.Transaction = dbTransation; // 加了这句
在执行
db.ExecuteNonQuery(dbCommand);
出错,报
The transaction is either not associated with the current connection or has been completed
shjqk 2009-03-24
  • 打赏
  • 举报
回复
谢谢!
Database dbTest;
dbTest = DatabaseFactory.CreateDatabase(strConn);
DbCommand dbCommand = dbTest.GetSqlStringCommand("......");
using (DbConnection conn = dbTest.CreateConnection())
{
conn.Open();
DbTransaction dbTransation = conn.BeginTransaction();
dbCommand.Transaction = dbTransation; // 加了这句
try
{
dbTest.ExecuteNonQuery(dbCommand);
///执行完成就回滚
dbTransation.Rollback();
//直接在这回滚,但还是会保存数据
}
catch(Exception ex)
{
//这里会在执行的时候报
The transaction is either not associated with the current connection or has been completed
ojekleen 2009-03-24
  • 打赏
  • 举报
回复
3楼正确,事务必须困绑在DBCOMMAND上面,这样才对这次执行起事务控制作用.
mashimaro_ra 2009-03-24
  • 打赏
  • 举报
回复
Database dbTest;
dbTest = DatabaseFactory.CreateDatabase(strConn);
DbCommand dbCommand = dbTest.GetSqlStringCommand("Insert ......");
using (DbConnection conn = dbTest.CreateConnection())
{
conn.Open();
DbTransaction dbTransation = conn.BeginTransaction();
try
{
//添加
cmd.Transaction = dbTransation;//cmd是SqlCommand对象,换成你的变量试试
dbTest.ExecuteNonQuery(dbCommand);
///执行完成就回滚
dbTransation.Rollback();
//直接在这回滚,但还是会保存数据
}
cppfaq 2009-03-24
  • 打赏
  • 举报
回复
conn.Open(); 
DbTransaction dbTransation = conn.BeginTransaction();
dbCommand.Transaction = dbTransation; // 注意这里
try
{
dbTest.ExecuteNonQuery(dbCommand);
///执行完成就回滚
dbTransation.Rollback();
//直接在这回滚,但还是会保存数据
}
benbirdar 2009-03-24
  • 打赏
  • 举报
回复
你还没有把事务提交就回滚了,当然不起作用!
你把的try部分改成下面这样试试:

try
{
dbTest.ExecuteNonQuery(dbCommand);
dbTransation.Commit(); //提交事务
}
catch
{
dbTransation.Rollback(); //如果发生异常,事务回滚
}

111,118

社区成员

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

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

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