加入事务后我的程序出错,请大家帮忙看看

bluewings 2003-09-12 04:39:33
ObjConn.OpenConn(MyConn)
Dim MyTran As SqlTransaction = MyConn.BeginTransaction
Mycmd.Connection = MyConn
MyCmd.Transaction = MyTran

Try
......
MyTran.Commit()
Catch e As SqlException
......
MyTran.Rollback()
End Try

ObjConn.CloseConn(MyConn) '关闭数据库


如果数据提交成功则能正确执行,若数据错误则执行catch后的语句,显示:
ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION
...全文
28 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluewings 2003-09-16
  • 打赏
  • 举报
回复
to:loulanlouzhu(桃花潭水深千尺,不及阿勇念你情)
我按照你给出的例子已经修改了文件,但是我提交的数据若正确,则可以通过即执行commit,若数据错误时,应执行rollback,数据回滚,则报错:ROLLBACK TRANSACTION 请求没有对应的 BEGIN TRANSACTION
loulanlouzhu 2003-09-16
  • 打赏
  • 举报
回复
数据错误--》什么意思!?
bluewings 2003-09-15
  • 打赏
  • 举报
回复
csdn版内就没有高手了吗?我的问题已加分!
loulanlouzhu 2003-09-15
  • 打赏
  • 举报
回复
Public Sub RunSqlTransaction(myConnString As String)
Dim myConnection As New SqlConnection(myConnString)
myConnection.Open()

Dim myCommand As New SqlCommand()
Dim myTrans As SqlTransaction

' Start a local transaction
myTrans = myConnection.BeginTransaction(IsolationLevel.ReadCommitted, "SampleTransaction")
' Must assign both transaction object and connection
' to Command object for a pending local transaction
myCommand.Connection = myConnection
myCommand.Transaction = myTrans

Try
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, 'Description')"
myCommand.ExecuteNonQuery()
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, 'Description')"
myCommand.ExecuteNonQuery()
myTrans.Commit()
Console.WriteLine("Both records are written to database.")
Catch e As Exception
myTrans.Rollback("SampleTransaction")
Console.WriteLine(e.ToString())
Console.WriteLine("Neither record was written to database.")
Finally
myConnection.Close()
End Try
End Sub 'RunSqlTransaction
bluewings 2003-09-14
  • 打赏
  • 举报
回复
to gong1(轻松编程):
已经尝试过了,还是不行!版上高手请帮帮忙,分数不够另开帖加分!
bluewings 2003-09-14
  • 打赏
  • 举报
回复
MyTran没有Bigin()的方法
BenZ004 2003-09-14
  • 打赏
  • 举报
回复
MyTran是不是有一个Bigin()的方法?
你点一下看看,如果有,写上去,作为一个事务的开始
试试
webdiyer 2003-09-14
  • 打赏
  • 举报
回复
不熟悉vb,不知道 MyConn.BeginTransaction 是否与 MyConn.BeginTransaction()一样?严格的来说应该是后者才对。
2002pine 2003-09-13
  • 打赏
  • 举报
回复
Catch e As SqlException
改为
Catch e As Exception
loulanlouzhu 2003-09-13
  • 打赏
  • 举报
回复
SqlConnection myConnection = new SqlConnection("Data Source=localhost;Initial Catalog=Northwind;Integrated Security=SSPI;");
myConnection.Open();
// 启动一个事务
SqlTransaction myTrans = myConnection.BeginTransaction();



// 为事务创建一个命令
SqlCommand myCommand = new SqlCommand();
myCommand.Connection=myConnection;
myCommand.Transaction = myTrans;
try
{
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (100, "Description")";
myCommand.ExecuteNonQuery();
myCommand.CommandText = "Insert into Region (RegionID, RegionDescription) VALUES (101, "Description")";
myCommand.ExecuteNonQuery();
myTrans.Commit();
Console.WriteLine("Both records are written to database.");
}
catch(Exception e)
{
myTrans.Rollback();
Console.WriteLine(e.ToString());
Console.WriteLine("Neither record was written to database.");
}
finally
{
myConnection.Close();
}
bluewings 2003-09-13
  • 打赏
  • 举报
回复
版上高手请帮帮忙啊,这个小问题应该不会没有人不会吧?
gong1 2003-09-13
  • 打赏
  • 举报
回复
ObjConn.CloseConn(MyConn)
放到end try 之后试试
bluewings 2003-09-13
  • 打赏
  • 举报
回复
修改过catch 后的内容,还是报错:完整的程序如下:
ObjConn.OpenConn(MyConn)
If Ret = 221 Then Return Ret '数据库连接失败
Dim MyTran As SqlTransaction = MyConn.BeginTransaction
MyCmd.Connection = MyConn
MyCmd.Transaction = MyTran
MyCmd.CommandType = CommandType.StoredProcedure

Try
'添加主表数据
MyCmd.CommandText = "StockOut_Add"
MyCmd.Parameters.Add("@OutId", SqlDbType.Char, 15).Value = _OutId
MyCmd.Parameters.Add("@OutTypeId", SqlDbType.Char, 4).Value = _OutTypeId
MyCmd.Parameters.Add("@OutSenderId", SqlDbType.VarChar, 30).Value = _OutSenderId
MyCmd.Parameters.Add("@OutReceiveId", SqlDbType.VarChar, 30).Value = _OutReceiveId
MyCmd.Parameters.Add("@OutOperateId", SqlDbType.VarChar, 15).Value = _OutOperateId
MyCmd.ExecuteNonQuery()
MyCmd.Parameters.Clear()

'添加从表数据
For i = 0 To _Category - 1
If (_UnitsId(i) <> "") Then
MyCmd.CommandText = "StockOutDetail_Add"
MyCmd.Parameters.Add("@OutId", SqlDbType.Char, 15).Value = _OutId
MyCmd.Parameters.Add("@OutDetailUnitsID", SqlDbType.VarChar, 30).Value = _UnitsId(i)
MyCmd.Parameters.Add("@OutDetailQuantity", SqlDbType.VarChar, 20).Value = _Quantity(i)
MyCmd.Parameters.Add("@OutDetailPrice", SqlDbType.VarChar, 20).Value = _Price(i)
MyCmd.Parameters.Add("@OutdetailPasID", SqlDbType.VarChar, 30).Value = _PasTypeId(i)
MyCmd.ExecuteNonQuery()
MyCmd.Parameters.Clear()
End If
Next
MyTran.Commit()
Ret = 1
Catch e As Exception
MyTran.Rollback()
Ret = 0
Finally
ObjConn.CloseConn(MyConn) '关闭数据库
End Try

Return Ret
bluewings 2003-09-12
  • 打赏
  • 举报
回复
已经有MyConn.BeginTransaction了
acewang 2003-09-12
  • 打赏
  • 举报
回复
catch之前没有BEGIN TRANSACTION吗?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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