C# 创建新的地震采集海洋框架
我正试图用下面的代码片段创建一个新的空地震采集C# 创建新的地震采集海洋框架,c#,transactions,ocean,petrel,C#,Transactions,Ocean,Petrel,我正试图用下面的代码片段创建一个新的空地震采集 Collection已创建并添加到输入窗格,但尝试创建NewSeismicCollection会引发 插件已触发错误: Slb.Ocean.Core.TransactionLockException;事务锁定失败 这不应该是在try块中提交的单个事务中,如: using (ITransaction txn = DataManager.NewTransaction()) { try { txn.Lock(proj);
Collection
已创建并添加到输入窗格,但尝试创建NewSeismicCollection
会引发
插件已触发错误:
Slb.Ocean.Core.TransactionLockException;事务锁定失败
这不应该是在
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;
}
}
您的第一个事务块缺少提交()这将导致放弃的事务异常,并可能导致您的项目处于不受支持的状态,这反过来可能会导致您的事务锁定异常。我刚刚意识到,因为项目中没有地震数据,所以没有“seismicProj”所以我首先创建了一个空的地震项目,它成功了。非常感谢Alex和Marcelo。我尝试了你的两个建议,但仍然得到事务锁定失败..你什么时候(即在上面代码块的哪一行)得到这个异常,它的消息是什么?谢谢Alex。从OceanPetreleException.log文件中,异常位于上述代码片段的第7行(txn.Lock(seismicProj);)。因此事务无法锁定地震项目。是因为没有地震数据的海燕项目没有地震项目吗?异常信息是什么?您的
seismicroj
值是否为null
?如果没有,您可以尝试将其拆分为两个事务:一个在proj
集合上,另一个在seismicroj
集合上(请参见我的编辑)。
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;
}
}