【问题标题】:How to using oracledataadapter with transaction?如何在事务中使用 oracledataadapter?
【发布时间】:2012-03-29 11:43:33
【问题描述】:

我使用一种方法来使用 Select statiments 获取数据。当我使用链接数据库使用 select statiment 时出现错误(ORA-01453 SET TRANSATION 必须是第一个事务语句。)

我知道 solition,但我不能将事务方法与 Oracledataadapter 一起使用。

我想使用 Commit() ... Rollback()。

这是我的代码:

private System.Data.DataTable GetDataTable_(string SqlStatement, bool fromProcCall)
        {

            OracleConnection Con = new OracleConnection();
            try
            {
                Con = Connection();
                OpenConnection(Con, fromProcCall);

                //-----------------------------------------
                DateTime startTime = DateTime.Now;
                //-----------------------------------------
                DataSet ds = new DataSet();

                OracleDataAdapter sda = new OracleDataAdapter(SqlStatement, Con);                
                sda.Fill(ds, "tbl1");
                //-----------------------------------------
                if (!fromProcCall)
                    DurationOfIfsAction = DateTime.Now.Subtract(startTime).Milliseconds;
                else
                    DurationOfFirstIfsAction = DateTime.Now.Subtract(startTime).Milliseconds;
                //-----------------------------------------

                CloseConnection(Con);
                return ds.Tables[0];
            }
            catch (Exception ex)
            {
                if (Con != null)
                {
                    try
                    {
                        CloseConnection(Con);
                    }
                    catch (Exception) { }
                }
                throw new Exception("ERROR[" + ex.Message + "]");
            }
        }

【问题讨论】:

    标签: c# oracle transactions


    【解决方案1】:

    基本上,你可以这样做:

    oraConn = new OracleConnection("CONNECTION STRING");
    oraConn.Open();
    
    //Command with transaction
    OracleCommand oraCom = oraConn.CreateCommand();
    oraCom.CommandText = "INSERT QUERY";
    oraCom.Transaction = oraCom.Connection.BeginTransaction(IsolationLevel.ReadCommitted);
    
    //Execute
    if (oraCom.Connection.State == ConnectionState.Closed)
    {
          oraCom.Connection.Open();
    }
    
    oraCom.ExecuteNonQuery();
    
    //Commit / Rollback
    oraCom.Transaction.Commit(); // or oraCom.Transaction.Rollback();
    

    要将它与 DataAdapter 一起使用,概念是相同的:创建事务设置 DataAdapter.SelectCommand.Transaction,然后您可以使用 Commit()Rollback() 进行控制。

    【讨论】:

      猜你喜欢
      • 2019-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      相关资源
      最近更新 更多