2009-11-05 6 views
2

MSSQL 데이터베이스가있는 GIS 계층이 있습니다. 레이어의 기능은 말하자면 esriFieldTypeString 유형의 필드와 esriFieldTypeBlob 유형 중 하나입니다. 문자열 필드를 잘 편집 할 수 있지만 Blob을 편집하려고하면 StopEditOperation()에서 매우 일반적인 예외가 발생합니다 (메시지 : "COM 컴포넌트로의 호출에서 HRESULT E_FAIL이 반환되었습니다.", 오류 코드 : -2147467259). 서버 로그에 관련된 내용을 찾을 수 없습니다. 아무도 무슨 일이 일어나고 있는지 알지 못해요?ArcGIS Engine에서 blob 필드를 편집하는 중 오류가 발생했습니다.

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(); 

답변

1

먼저 문제가 매우 구체적이므로 ESRI 포럼에 대한 피드백을받을 가능성이 큽니다.

나는 BLOBs와 비슷한 문제가 있었음을 기억하고있는 것 같습니다. 필자의 경우 재순환 커서를 사용하여 기능 참조를 검색하고 재활용되지 않은 커서를 사용하여 해결했습니다. 편집을 수행 할 때 이것이 귀하의 경우가 아니라고 가정합니다.이를 위해 비 재활용 커서를 사용해야합니다. 또는 레이어에서 직접 지형지 물에 대한 참조를 가져 오는 중입니다.이 경우 커서는 전혀 포함되지 않습니다.

MemoryBlobStream의 ImportFromVariant를 사용하는 방법은 문제가되지 않지만 문제는 없습니다. 개인용 또는 파일 지오 데이터베이스 내부에서 BLOB를 편집 할 때 동일한 문제가 발생하는지 먼저 테스트합니다.

+0

: 객체를 행하기위한 참조가 편집 작업을 통해 유지됩니다 경우 또한

이의 말에 제안을하려고 .. 모든 참조하고 다시 반입 객체를 폐기 지금까지 행운. –

1

편집 세션에서 기능을 사용해보세요. 모든 참조 폐기 http://edndoc.esri.com/arcobjects/9.1/ComponentHelp/esriGeoDatabase/IWorkspaceEdit.htm

에서

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

은 (StartEditing에) 편집 세션 경계에서 검색된 객체를 행합니다. 하지만와, 내가 먼저 포럼을 시도

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

관련 문제