创建新的地震收集海洋框架

时间:2015-04-30 00:01:27

标签: c# transactions ocean petrel

我正在尝试使用以下代码段创建一个新的空地震集合。

Collection已创建并添加到输入窗格,但尝试创建NewSeismicCollection会引发

  

插件已触发错误:   Slb.Ocean.Core.TransactionLockException;事务锁定失败。

if(seismicProj.SeismicCollectionCount == 0)
{
    PetrelLogger.InfoOutputWindow("No seismic collections in current project");
    using (ITransaction trans2 = DataManager.NewTransaction())
    {
        trans2.Lock(proj);
        Collection col2 = proj.CreateCollection("Collection"); 
    }

    using (ITransaction txn = DataManager.NewTransaction())
    {
        try
        {
            txn.Lock(seismicProj);
            SeismicCollection seisColl = seismicProj.CreateSeismicCollection(
                "NewSeismicCollection");
        }
        catch (InvalidOperationException e)
        {
            PetrelLogger.InfoOutputWindow(e.Message);
        }
        finally
        {
            txn.Commit();
        }
    }
}
else
{
    // do something else
}

3 个答案:

答案 0 :(得分:2)

不应该在try块中提交的单个事务中,如:

using (ITransaction txn = DataManager.NewTransaction())
{
    try
    {
        txn.Lock(proj);
        Collection col2 = proj.CreateCollection("Collection"); 
        txn.Lock(seismicProj);
        SeismicCollection seisColl = seismicProj.CreateSeismicCollection("NewSeismicCollection");
        txn.Commit();
    }
    catch (Exception e)
    {
        PetrelLogger.InfoOutputWindow(e.Message);
        throw;
    }
}

或者找出错误:尝试两个单独的交易:

using (ITransaction txn = DataManager.NewTransaction())
{
    try
    {
        txn.Lock(proj);
        Collection col2 = proj.CreateCollection("Collection"); 
        txn.Commit();
    }
    catch (Exception e)
    {
        PetrelLogger.InfoOutputWindow(e.Message);
        throw;
    }
}

using (ITransaction txn = DataManager.NewTransaction())
{
    try
    {
        txn.Lock(seismicProj);
        SeismicCollection seisColl = seismicProj.CreateSeismicCollection("NewSeismicCollection");
        txn.Commit();
    }
    catch (Exception e)
    {
        PetrelLogger.InfoOutputWindow(e.Message);
        throw;
    }
}

答案 1 :(得分:1)

您的第一个事务块缺少commit(),这将导致废弃的事务异常,并可能导致您的项目处于不受支持的状态,这反过来可能会导致您的事务锁定异常。

答案 2 :(得分:0)

我刚刚意识到,因为项目中没有地震数据,所以没有地震资源"所以我先创建了一个空的地震项目并且有效。