-1

だから基本的に私の問題はこれです。データベースのテーブルから取得したSQLステートメントがあります。このSQLステートメントには、プリペアドステートメント変数のプレースホルダーが含まれています。変数の置き換えを処理するためにラッパークラスを使用しています。ラッパークラスは、PostgreSQLに渡されるときにそれらが正しいタイプであることを確認することを扱います。ステートメントに構文エラーがあり、それが私を怒らせています。プリペアドステートメントの一部は、ST_GeomFromText()関数で使用される文字列です。この文字列には、プリペアドステートメント変数を介して値が入力されます。奇妙なことに、変数は文字列に連結されているだけでなく、受け取ったエラーの外観によって個々のエンティティとして扱われています。私が試したクエリとエラーメッセージの例については、以下を参照してください。

誰かがこれに光を当てることができますか?それは私を怒らせています。テキストからこのジオメトリを構築できる必要があり、パラメータはプリペアドステートメントを介して渡すことができる必要があります。私はC#の軌跡をたどりましたが、値を文字列としてコマンドオブジェクトパラメーターに渡すのを終了しているため、これらを文字列以外のものとして扱うことができるコードで変換が行われていません。

ステートメント(表から返される)

番号1。値付き

select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy 
from 
   ST_ENVELOPE(
       ST_TRANSFORM(
          ST_GeomFromText('POLYGON(('||138082||' '||12907||','||207179||' '||12907||','||207179||' '||88647||','||138082||' '||88647'||','||138082||' '||12907||'))',27700),4326)) 
as a

番号1。値なし

select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy 
from 
   ST_ENVELOPE(
      ST_TRANSFORM(
         ST_GeomFromText('POLYGON(('||:0||' '||:1||','||:2||' '||:3||','||:4||' '||:5||','||:6||' '||:7'||','||:8||' '||:9||'))',27700),:10)) 
as a

番号2。値付き

select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy
from 
   ST_ENVELOPE(
      ST_TRANSFORM(
         ST_GeomFromText($$POLYGON((138082 12907, 207179 12907, 207179 88647, 138082 88647, 138082 12907))$$,27700), 4326)) 
as a

番号2。値付き

select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy
from 
   ST_ENVELOPE(
      ST_TRANSFORM(
         ST_GeomFromText($$POLYGON((:0 :1, :2 :3, :4 :5, :6 :7, :8 :9))$$,27700),:10)) 
as a;

PostgreSQLログからのエラー:

ナンバー1

2012-04-18 09:39:41 BST ERROR:  syntax error at or near "'||'" at character 283
2012-04-18 09:39:41 BST STATEMENT:  select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy from ST_ENVELOPE(ST_TRANSFORM(ST_GeomFromText('POLYGON(('||((E'138082'))||' '||((E'12907'))||','||((E'207179'))||' '||((E'12907'))||','||((E'207179'))||' '||((E'88647'))||','||((E'138082'))||' '||((E'88647'))'||','||((E'138082'))||' '||((E'12907'))||'))',27700),((E'4326')))) as a

2番

09:39:27 BST ERROR:  parse error - invalid geometry
2012-04-18 09:39:27 BST HINT:  "POLYGON(((" <-- parse error at position 10 within geometry
2012-04-18 09:39:27 BST STATEMENT:  select st_xmin(a) minx, st_ymin(a) miny, st_xmax(a) maxx, st_ymax(a) maxy ,1, 1 from ST_ENVELOPE(ST_TRANSFORM(ST_GeomFromText($$POLYGON((((E'464217')) ((E'133902')), ((E'591014')) ((E'133902')), ((E'591014')) ((E'261209')), ((E'464217')) ((E'261209')), ((E'464217')) ((E'133902'))))$$,27700),((E'4326')))) as a;
4

1 に答える 1

2

'最初のエラーは、文字行283に余分な文字が含まれる単純な構文エラーです。値のないバージョンの場合は、に変更88647'||してください。88647||:7'||:7||

2番目のエラーを再現できません。

MBRのトピックについて、ボックスの関数/タイプを見たことがありますか?彼らはあなたを助けることができます。

于 2012-04-18T09:21:06.823 に答える