2012-04-18 23 views
-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.值從PostgreSQL的日誌

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; 

錯誤:

數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; 

回答

2

你的第一個錯誤是一個額外的'字符一個簡單的語法錯誤,在字符列283更改88647'||88647||,並:7'||:7||你沒有價值的版本。

我無法再現您的第二個錯誤。

關於MBR的話題,你見過box functions/types?他們可以幫助你。

+0

謝謝邁克。 Facepalm時刻在那裏。也感謝您的鏈接。我一定會檢查出來。 – CSharpened 2012-04-18 09:29:39

相關問題