mycom = mycon.CreateCommand
MyTrans = mycon.BeginTransaction(IsolationLevel.ReadCommitted)
mycom.Connection = mycon
mycom.Transaction = MyTrans
Try
mycom.CommandText = Str1
mycom.ExecuteNonQuery()
MyTrans.Commit()
mycon.Close()
mycon = Nothing
bol_sql = True
Catch ex As Exception
mycon.Close()
mycon = Nothing
bol_sql = False
MyTrans.Rollback()
MessageBox.Show(ex.Message, StrName, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try 这是我用来提交的一个事务处理。。现在有时候有两个情况出现,
一,报错提示事务有时候提交失败,提示说事务 以关闭 ??
二,mycom.CommandText = Str1 这str1中有 insert 和update 语句,为什么有时就其中的一部分语句提交成功?
在数据库中只能看到Str1中提交的一部分数据?
MyTrans = mycon.BeginTransaction(IsolationLevel.ReadCommitted)
mycom.Connection = mycon
mycom.Transaction = MyTrans
Try
mycom.CommandText = Str1
mycom.ExecuteNonQuery()
MyTrans.Commit()
mycon.Close()
mycon = Nothing
bol_sql = True
Catch ex As Exception
mycon.Close()
mycon = Nothing
bol_sql = False
MyTrans.Rollback()
MessageBox.Show(ex.Message, StrName, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try 这是我用来提交的一个事务处理。。现在有时候有两个情况出现,
一,报错提示事务有时候提交失败,提示说事务 以关闭 ??
二,mycom.CommandText = Str1 这str1中有 insert 和update 语句,为什么有时就其中的一部分语句提交成功?
在数据库中只能看到Str1中提交的一部分数据?
解决方案 »
- 求懂silverlight开发应用的高手
- 新手问题,关于最大化的,望指教!
- 在 c# 中出现 检索 COM 类工厂中 CLSID 为 {29131537。。。。 的组件时失败,原因是出现以下错误: 80040154。
- 关于对话框响应和画面切换的问题
- 在C# 里面通过 Microsoft Excel 对象库 调用EXCEL 部署时必须在安装机器安装 excel 2003 吗 急等
- 有什么高招来解决窗口的确定、取消操作?
- EF 更新 对象
- C# winform 图表绘制
- 新手,请教一个C#问题?
- C#如何将图片转为16位5R6G5B格式通过串口传输到显示屏
- C#高级编程(第四版)这本书怎么样?
- 有C#基础的初学者求ASP.NET推荐资料
如果这里用事务,我觉得你可以一个一个的执行SQL,这样比较好一点,然后事务一起提交就行了,但是执行还是最好分开执行
还有你有时候提交不成功,有时候能提交成功,我觉得可能是因为你一起执行了几句SQL,这样的话每句SQL执行之后,数据对其他的可能也有一些影响,从而造成了后面的SQL执行不成功,你最好具体看看报的具体是什么异常,看看异常信息里面说的是什么.
一,报错提示事务有时候提交失败,提示说事务 以关闭 ?? 你在catch语句块中,rollback之前把connection关了。Connection.Close()方法就会 RollBack 挂起的事务。
后面你再调用RollBack,当然就提示 事务已经关闭。
Catch ex As Exception
mycon.Close()
mycon = Nothing
bol_sql = False
MyTrans.Rollback()
二,mycom.CommandText = Str1 这str1中有 insert 和update 语句,为什么有时就其中的一部分语句提交成功?
在数据库中只能看到Str1中提交的一部分数据? 你的CommandText里有多条语句,可以这样分开写:
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')";
command.ExecuteNonQuery();
command.CommandText =
"Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')";
command.ExecuteNonQuery();
MyTrans.Commit()
cmd.Connection = new SqlConnection("连接字符串");
cmd.Connection.Open();
cmd.Transaction = cmd.Connection.BeginTransaction(IsolationLevel.ReadUncommitted);
try
{
cmd.CommandText = "SQL语句1";
int result = cmd.ExecuteNonQuery();
if (result <= 0)
{
cmd.Transaction.Rollback();
return;
} cmd.CommandText = "SQL语句2";
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
cmd.Transaction.Rollback();
return;
} cmd.CommandText = "SQL语句3";
result = cmd.ExecuteNonQuery();
if (result <= 0)
{
cmd.Transaction.Rollback();
return;
} //提交事务
cmd.Transaction.Commit();
}
catch
{
cmd.Transaction.Rollback();
}
finally
{
cmd.Connection.Close();
cmd.Connection.Dispose();
cmd.Dispose();
}
问题一 解决
问题二 还没觉得 ,问题是我的mycom.CommandText = Str1 这str1中有 insert 和update 语句,
我的str1中的sql语句的长度是不确定的哦.. 请问怎么处理。。
谢谢!!!!
{ READ COMMITTED
| READ UNCOMMITTED
| REPEATABLE READ
| SERIALIZABLE
}参数
READ COMMITTED指定在读取数据时控制共享锁以避免脏读,但数据可在事务结束前更改,从而产生不可重复读取或幻像数据。该选项是 SQL Server 的默认值。READ UNCOMMITTED执行脏读或 0 级隔离锁定,这表示不发出共享锁,也不接受排它锁。当设置该选项时,可以对数据执行未提交读或脏读;在事务结束前可以更改数据内的数值,行也可以出现在数据集中或从数据集消失。该选项的作用与在事务内所有语句中的所有表上设置 NOLOCK 相同。这是四个隔离级别中限制最小的级别。REPEATABLE READ锁定查询中使用的所有数据以防止其他用户更新数据,但是其他用户可以将新的幻像行插入数据集,且幻像行包括在当前事务的后续读取中。因为并发低于默认隔离级别,所以应只在必要时才使用该选项。SERIALIZABLE在数据集上放置一个范围锁,以防止其他用户在事务完成之前更新数据集或将行插入数据集内。这是四个隔离级别中限制最大的级别。因为并发级别较低,所以应只在必要时才使用该选项。该选项的作用与在事务内所有 SELECT 语句中的所有表上设置 HOLDLOCK 相同。