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

Vb.net 如何一次对3个不同的oracle表执行3个命令(SQL语句)?,vb.net,oracle,Vb.net,Oracle,问候, 我正在用vb.net 2005和oracle 10g实现一个应用程序,我遇到了一个功能,可以从oracle中的三个不同表中选择/插入/更新/删除数据 因此,我想知道是否有一种方法可以分别准备所有3个命令(SQL语句),然后在oracle中一次性执行它们,这样我就可以保证所有命令都成功执行或都失败执行,而且我还可以获得更高的性能,这对我来说至关重要 因此,我在vb.net中寻找一种语法,它可以帮助我在oracle的一次操作中执行多个OracleCommand 因此请建议…这可以用伪代码来回

问候,

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

因此,我想知道是否有一种方法可以分别准备所有3个命令(SQL语句),然后在oracle中一次性执行它们,这样我就可以保证所有命令都成功执行或都失败执行,而且我还可以获得更高的性能,这对我来说至关重要

因此,我在vb.net中寻找一种语法,它可以帮助我在oracle的一次操作中执行多个OracleCommand


因此请建议…

这可以用伪代码来回答

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
将cnn设置为OracleConnection
Dim tr as OracleTransaction
尝试
cnn=新OracleConnection(“您的连接字符串”)
cnn.Open()
tr=cnn.BeginTransaction(IsolationLevel.ReadCommitted)
Dim cmd1作为OracleCommand=con.CreateCommand();
Dim cmd2作为OracleCommand=con.CreateCommand();
Dim cmd3作为OracleCommand=con.CreateCommand();
cmd1.CommandText=“您的查询\u Text1”
cmd2.CommandText=“您的查询\u Text2”
cmd3.CommandText=“您的查询\u Text3”
cmd1.ExecuteNonQuery()
cmd2.ExecuteNonQuery()
cmd3.ExecuteNonQuery()
提交
cnn.Close()
cnn=没有
tr=无
抓住
如果没有,那么
tr.Rollback()
如果结束
如果什么都没有
cnn.Close()
如果结束
cnn=没有
tr=无
结束尝试
事务使数据库作为一个单元执行一系列操作。 标记调用连接的BeginTransaction方法的事务的开始。 事务块内的操作保证全部发生或全部不发生。
如果一切顺利,则确认事务并将所有内容持久化到表中。
如果发生了中断代码流(异常)的情况,您应该调用“回滚”来取消在事务内部对数据库所做的所有操作

这可以用伪代码来回答

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
将cnn设置为OracleConnection
Dim tr as OracleTransaction
尝试
cnn=新OracleConnection(“您的连接字符串”)
cnn.Open()
tr=cnn.BeginTransaction(IsolationLevel.ReadCommitted)
Dim cmd1作为OracleCommand=con.CreateCommand();
Dim cmd2作为OracleCommand=con.CreateCommand();
Dim cmd3作为OracleCommand=con.CreateCommand();
cmd1.CommandText=“您的查询\u Text1”
cmd2.CommandText=“您的查询\u Text2”
cmd3.CommandText=“您的查询\u Text3”
cmd1.ExecuteNonQuery()
cmd2.ExecuteNonQuery()
cmd3.ExecuteNonQuery()
提交
cnn.Close()
cnn=没有
tr=无
抓住
如果没有,那么
tr.Rollback()
如果结束
如果什么都没有
cnn.Close()
如果结束
cnn=没有
tr=无
结束尝试
事务使数据库作为一个单元执行一系列操作。 标记调用连接的BeginTransaction方法的事务的开始。 事务块内的操作保证全部发生或全部不发生。
如果一切顺利,则确认事务并将所有内容持久化到表中。
如果发生了中断代码流(异常)的情况,您应该调用“回滚”来取消在事务内部对数据库所做的所有操作

您需要签出事务您需要签出事务谢谢Steve…我只是想知道您的方法是否可以通过单独执行每个命令来为我提供更好的性能..或者只是在出现错误时回滚执行..请建议..我还想告诉您删除三行cmd1.ExecuteOnQuery()cmd2.ExecuteOnQuery()cmd3.ExecuteOnQuery(),因为OracleCommand的事务属性为只读且无法分配…@Davideg您是指我将事务分配给该命令的三行吗?。是的,你说得对。如果使用ODP.NET,则无法设置该属性。另外,来自微软的客户也有一些问题。我将尝试编辑answer@Davideg在不了解查询文本的情况下,无法提供关于性能的有力建议。但是,在类似的情况下,通过查看在单个调用中执行,所有相关命令。你能给我一个如何使用storedprocedure在一次调用中执行所有命令的示例吗?请记住,我正在使用命令插入/选择BLOB数据类型…谢谢你,Steve…我只想知道你的方法是否可以通过单独执行每个命令来提供更好的性能…或者只是回滚错误情况下的执行…请建议…我还想告诉您删除三行cmd1.ExecuteOnQuery()cmd2.ExecuteOnQuery()cmd3.ExecuteOnQuery(),因为OracleCommand的事务属性是只读的,无法分配…@Davide您是指我将事务分配给命令的三行吗?。是的,你说得对。如果使用ODP.NET,则无法设置该属性。另外,来自微软的客户也有一些问题。我将尝试编辑answer@Davideg在不了解查询文本的情况下,无法提供关于性能的有力建议。但是,在类似的情况下,最好的改进是在一次调用中执行所有相关命令的storedprocedure。您能给我一个如何使用storedprocedure在一次调用中执行所有命令的示例吗?请记住,我正在用命令插入/选择BLOB数据类型。。。