public static bool ExeDataOra(string sql1,string sql2, string OracleConnString)
    {
        bool result = false;        OracleConnection conn = new OracleConnection(OracleConnString);
        OracleTransaction t = conn.BeginTransaction();
       
        try
        {
            conn.Open();
            OracleCommand cmd = new OracleCommand(sql1, conn);
            cmd.ExecuteNonQuery();
          
            OracleCommand cmd2 = new OracleCommand(sql2, conn);
            cmd2.ExecuteNonQuery();
           
            t.Commit();
           
            result = true;
        }
        catch
        {
            t.Rollback();
            throw new Exception("访问数据库失败!");
        }
        finally
        {
            conn.Close();
        }        return result;
    }在这个方法里执行两条SQL语句,插入两张表,用事务控制,可是执行时,报“服务器无法处理请求”,不用存储过程,怎么样能实现事务呢?

解决方案 »

  1.   

    是C#啊如果只执行一个sql就没错么?
    我没像你这样写过
      

  2.   

    在一个程序块中OracleCommand只能实例化一次把,可能跟连接数据库时的监听端口有关,在一个程序库中实例化已经存在的OracleCommand会发生端口冲突,所以会失败,我觉得是这样,
    OracleCommand cmd = new OracleCommand(sql1, conn);
      cmd.ExecuteNonQuery();
        
    cmd1 = new OracleCommand(sql2, conn);
      cmd1.ExecuteNonQuery();
    这样写是可以的吧
      

  3.   


    using (OracleConnection conn = new OracleConnection(OracleConnString))
    {
      conn.Open();
      OracleCommand cmd = conn.CreateCommand();
      OracleTransaction trans = conn.BeginTransaction();
      cmd.Transaction = trans;  try
      {
        cmd.CommandText=sql1;
        cmd.ExecuteNonQuery();
        cmd.CommandText=sql2;
        cmd.ExecuteNonQuery();
        trans.Commit();
      }
      catch 
      {
        trans.Rollback();
        throw new Exception("Access failed.");
      }
    }
      

  4.   

    connection应该先open,才能再begin transaction