如何一次性对3个不同的oracle表执行3个命令(SQL语句)?

时间:2012-04-24 09:28:20

标签: vb.net oracle

问候语,

我正在使用vb.net 2005和oracle 10g实现一个应用程序,我遇到了一个应该从oracle中的三个不同表中选择/插入/更新/删除数据的功能。

所以我想知道是否有办法分别准备所有3个命令(SQL语句),然后一次性执行它们到oracle,所以这样我可以保证所有命令都成功执行或者所有都无法执行,而且我可以获得更多的性能,这在我的情况下是至关重要的。

因此,我在vb.net中寻找一种语法,帮助我一次性执行多个OracleCommand到oracle。

所以请指教......

1 个答案:

答案 0 :(得分:1)

这可以用伪代码来回答

Dim cnn as OracleConnection
Dim tr as OracleTransaction 
Try
    cnn = new OracleConnection("your_connection_string")
    cnn.Open()
    tr = cnn.BeginTransaction(IsolationLevel.ReadCommitted)

    Dim cmd1 as OracleCommand = con.CreateCommand();
    Dim cmd2 as OracleCommand = con.CreateCommand();
    Dim cmd3 as OracleCommand = con.CreateCommand();


    cmd1.CommandText = "Your_Query_Text1"
    cmd2.CommandText = "Your_Query_Text2"
    cmd3.CommandText = "Your_Query_Text3"    

    cmd1.ExecuteNonQuery()
    cmd2.ExecuteNonQuery()
    cmd3.ExecuteNonQuery()

    tr.Commit()
    cnn.Close()
    cnn = Nothing
    tr = Nothing
Catch
   if tr <> Nothing then
       tr.Rollback()
   End if 
   If cnn <> Nothing Then 
      cnn.Close()
   End If
    cnn = Nothing
    tr = Nothing
End Try

事务使数据库作为一个单元执行一系列操作。 您标记调用连接的BeginTransaction方法的事务的开始。 事务块内的操作保证全部发生或全部不发生 如果一切顺利,您确认交易并且所有内容都会保留在您的表中。 如果发生中断代码流(异常)的事情,您应该调用“rollback”来取消在事务内部对数据库所做的所有操作。