zoukankan      html  css  js  c++  java
  • Oracle事务细节问题

            最近在做一个数据库通用读写程序时发现Oracle的事务回滚仅对DML语句有效,而对于一个由DDL语句组成的事务过程,每一个操作都会自动提交,不会从出错处回滚。下面是一个基于.NET的Oracle驱动用C#写的执行非查询SQL语句的方法:

    代码
    public int GetNonQueryExecCount(string[] pSqls)
    {
    int count = 0;
    try
    {
    using (TransactionScope tranScope = new TransactionScope())
    {
    DbCommand dbCommand
    = m_oraConn.CreateCommand();
    lock (m_oraConn)
    {
    this.Open();
    for (int i = 0; i < pSqls.Length; i++)
    {
    dbCommand.CommandText
    = pSqls[i];
    count
    += dbCommand.ExecuteNonQuery();
    }
    tranScope.Complete();
    return count;
    }
    }
    }
    catch (Exception e)
    {
    throw e;
    }
    finally
    {
    this.Close();
    }
    }

    每成功执行一条DML语句,count会自动加1,而成功执行一条DDL语句,count不变。由于这样的特性,对于DDL语句的处理,我认为不需要采用事务机制,对于每条语句直接调用下面的方法即可。

    代码
    public bool ExecDDL(string pSql)
    {
    try
    {
    DbCommand dbCommand
    = m_oraConn.CreateCommand();
    this.Open();
    dbCommand.CommandText
    = pSql;
    dbCommand.ExecuteNonQuery();
    return true;
    }
    catch (Exception e)
    {
    return false;
    }
    finally
    {
    this.Close();
    }
  • 相关阅读:
    error LNK2019: 无法解析的外部符号 该符号在函数 中被引用 解决方案
    【OSG】运行OSG示例出现的奶牛不完整问题
    python 遍历文件夹
    python os操作
    python io操作
    python request 代理/超时/证书
    python tuple
    python dict
    python request post
    python request get
  • 原文地址:https://www.cnblogs.com/gisser/p/1832884.html
Copyright © 2011-2022 走看看