zjh2785 发表于 2017-11-2 14:16:32

很奇怪的错误提示:!dbobji.cpp@7227:eNotOpenForWrite

我明明是以写的模式打开的,为什么会出现这种错误呢?
刚接触C#好多东西还在摸索,希望路过的高手帮下忙。

我先贴出部分代码:


//这是另外一个类的,这两行应该是没问题的。
mDoc = Application. DocumentManager. MdiActiveDocument;
mDb = mDoc. Database;

public class MySymbolTableRecord
{
   protected ObjectId AddEntity (BlockTableRecord btRecord, Entity ent)
   {
    ObjectId ObjId;
    using (Transaction tran = mDb. TransactionManager. StartTransaction( ))
    {
   //调试的时候每次都是运行到这位置就出错了
   //内部错误: !dbobji.cpp@7227:eNotOpenForWrite
   ObjId = btRecord. AppendEntity(ent);
   tran. AddNewlyCreatedDBObject(ent, true);
   tran. Commit( );
   }
   return ObjId;
   }
   protected DBObject GetDBObject (ObjectId id, OpenMode mode)
      {
   DBObject dbObj;
   using (Transaction tran = mDb. TransactionManager. StartTransaction( ))
   {
   dbObj = tran. GetObject(id, mode);
   }
   return dbObj;
   }
}

public class Drawing : MySymbolTableRecord
{
   private BlockTableRecord mBlkTabRec;
   private Calculation mCalc;
   public Drawing ( )//构造函数
   {
   mBlkTabRec = GetDBObject(mDb. CurrentSpaceId, OpenMode. ForWrite) as BlockTableRecord;
   mCalc = new Calculation( );
   }
   public ObjectId AddLine (Point2d ptStart, Point2d ptEnd)//画直线
   {
   Line line = new Line(mCalc. P2ToP3(ptStart), mCalc. P2ToP3(ptEnd));
   return AddEntity(mBlkTabRec, line);
   }
   }


雪山飞狐_lzh 发表于 2017-11-2 19:57:26

你这样是试图用第一个事务打开的块表记录 去添加第二个事务的实体...感觉有点怪怪 建议用事务做为参数 从头到尾用一个事务

xinxirong 发表于 2017-11-3 09:23:06

不懂C#,不过new之后是不是应该open?

zjh2785 发表于 2017-11-4 19:10:35

雪山飞狐_lzh 发表于 2017-11-2 19:57
你这样是试图用第一个事务打开的块表记录 去添加第二个事务的实体...感觉有点怪怪 建议用事务做为参数 从头 ...

嗯应该是这样的我把所有的代码放在一个一起就没出现这个情况了。
页: [1]
查看完整版本: 很奇怪的错误提示:!dbobji.cpp@7227:eNotOpenForWrite