2

MSSQL データベースに支えられた GIS レイヤーがあります。レイヤー上のフィーチャには、たとえば、タイプ esriFieldTypeString の 1 つのフィールドとタイプ esriFieldTypeBlob の 1 つがあります。文字列フィールドは問題なく編集できますが、BLOB を編集しようとすると、StopEditOperation() が非常に一般的な例外をスローします (メッセージ:「COM コンポーネントへの呼び出しからエラー HRESULT E_FAIL が返されました。」、エラー コード: -2147467259)。サーバーログに関連するものは見つかりませんでした。何が起こっているのか誰にも分かりませんか?

IServerContext serverContext = GetServerContext(agsConn, serviceName);
ILayer layer = GetILayer(layerName, serverContext);
IWorkspace workspace = GetIWorkspace(layer);

var feature = GetIFeature(objectId, workspace, layer);

var workspaceEdit = (IWorkspaceEdit)workspace;
workspaceEdit.StartEditing(false);
workspaceEdit.StartEditOperation();

var index = feature.Fields.FindField(featureDetailName);
IField field = feature.Fields.get_Field(index);
byte[] byteArray = {1, 2, 3};
MemoryBlobStream blob = new MemoryBlobStream();
((IMemoryBlobStreamVariant)blob).ImportFromVariant(byteArray);
if (field.CheckValue(blob))
{
    feature.set_Value(index, blob);
}

feature.Store();

workspaceEdit.StopEditOperation();
workspaceEdit.StopEditing(true);

serverContext.RemoveAll();
serverContext.ReleaseContext();
4

2 に答える 2

1

編集セッション内から機能を取得してみてください。

var workspaceEdit = (IWorkspaceEdit)workspace;
workspaceEdit.StartEditing(false);
workspaceEdit.StartEditOperation();
var feature = GetIFeature(objectId, workspace, layer);

http://edndoc.esri.com/arcobjects/9.1/ComponentHelp/esriGeoDatabase/IWorkspaceEdit.htmから

編集セッション境界 (StartEditing) で取得された行オブジェクトへのすべての参照を破棄します。行オブジェクトへの参照が編集操作全体で維持される場合は、すべての参照を破棄してオブジェクトを再フェッチします。

また、最後にある提案を試してください:

http://forums.esri.com/Thread.asp?c=158&f=2281&t=241561

于 2010-03-18T13:18:34.027 に答える
1

まず、問題が非常に具体的であるため、ESRI フォーラムでより良いフィードバックが得られる可能性が非常に高くなります。

BLOB についても同様の問題があり、書き込みではなく読み取りのみを行っていたことを覚えているようです。私の場合、リサイクル カーソルを使用して機能参照を取得していましたが、非リサイクル カーソルを使用して解決しました。編集を実行しているため、リサイクルしないカーソルを使用する必要があるため、これはあなたのケースではないと思います。または、レイヤーから直接フィーチャへの参照を取得している可能性があります。これには、カーソルがまったく含まれていません。

あなたが MemoryBlobStream の ImportFromVariant を使用している方法は問題ありません。問題はありません。まず、パーソナル ジオデータベースまたはファイル ジオデータベース内の BLOB を編集するときに同じ問題が発生するかどうかをテストします。

于 2009-11-05T16:04:58.087 に答える