2016-12-21 5 views
0

ArcSDEとOracleをST_GEOMETRY空間タイプで使用しています。私はSqlGeoemtry型を使ってC#コードを書いています。私が望むのは、交差を要求することができるが、wktの代わりにwkbを使用することです。 私はそれがwktで動作することを知っていますが、私の特徴には多くの頂点がありますが、文字列リテラルが大きすぎるということについてはオラクルからエラーが出ます(私は2000文字程度そうです)。 私はまた、大きな文字列をCLOBにチャンクし、チャンクを送信し、交差操作を実行できることも知っています。C#のWell Known Binary入力を使用してsde.st_intersectsを要求するための適切なフォーマット

バイナリ形式を使用してこれらの問題をすべて回避することをお勧めします。しかし、私は構文に問題があります。ここでWKTのためにどのような作品である:ここでは

oracleCommand.CommandText = string.Format("SELECT OBJECTID FROM {0} WHERE sde.st_intersects(shape, sde.st_polyfromtext('{1}', 3071)) = 1", selectionLayerName, unionedBuffer.ToString()); 

は、今動作しないものです:

oracleCommand.CommandText = string.Format("SELECT OBJECTID FROM {0} WHERE sde.st_intersects(shape, sde.st_polyfromwkb('{1}', 3071)) = 1", selectionLayerName, unionedBuffer.STAsBinary()); 

障害者の苦情は、ORA-29900である:演算子バインディングは iがオラクルを取得するために何ができるのは存在しません。受信した機能をバイナリ形式で受け入れるには?

+0

は、ESRIのドキュメントである:私はブロブが、その後SqlGeometry呼び出しからバイト配列に読み込むようOracleパラメータを作成する必要がありました/manage-data/using-sql-with-gdbs/st-polyfromwkb.htm – VBAHole

答えて

0

私はそれを理解しました。 - http://desktop.arcgis.com/en/arcmap/10.3ここに参照のため

oracleCommand.CommandText = string.Format("SELECT OBJECTID FROM {0} WHERE sde.st_intersects(shape, sde.st_polyfromwkb(:THEBLOB, 3071)) = 1", selectionLayerName); 
OracleParameter param = oracleCommand.Parameters.Add(new OracleParameter(":THEBLOB", OracleDbType.Blob)); 
param.Value = unionedBuffer.STAsBinary().Value; 
関連する問題