在多次插入的时候,CityMaker 8开发之IResourceManager::AddModel/AddImage出错,提示内存已损坏或者rowbuffer.insert提示执行sql出错。
8里对释放要求比较严格,代码这样写就不会出现以上问题了。
//往fc中插入一行
IFdeCursor cursor = null;
int nPose = -1;
try
{
_featureClass.DeleteSpatialIndex("Geometry");
cursor = _featureClass.Insert();
IRowBuffer fcRow = _featureClass.CreateRowBuffer();
nPose = fcRow.FieldIndex("Name");
if (nPose == -1)
return;
fcRow.SetValue(nPose, osgName);
nPose = fcRow.FieldIndex("Groupid");
if (nPose == -1)
return;
fcRow.SetValue(nPose, 1);
IModelPoint modePoint = (IModelPoint)geoFactory.CreateGeometry(
gviGeometryType.gviGeometryModelPoint,
gviVertexAttribute.gviVertexAttributeZ);
modePoint.ModelName = osgName;
modePoint.X = 0;
modePoint.Y = 0;
modePoint.Z = 0;
modePoint.ModelEnvelope = env;
nPose = fcRow.FieldIndex("Geometry");
if (nPose == -1)
return;
fcRow.SetValue(nPose, modePoint);
cursor.InsertRow(fcRow);
cursor.Dispose();
IGridIndexInfo gridInfo = _featureClass.CalculateDefaultGridIndex("Geometry");
_featureClass.AddSpatialIndex(gridInfo);
}
catch (COMException ex)
{
System.Diagnostics.Trace.WriteLine(ex.Message);
}
finally
{
if (cursor != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(cursor);
cursor = null;
}
}
注意这一句:
cursor.Dispose();