2017-04-20 128 views
0

我正在使用來自VB的PostGIS和空間數據類型,並且我有這個插入查詢,我用它來保存放置在地圖上的標記的數據(我想保存標記的經度和緯度放置在數據庫中的地圖上)。我試圖用「雙」和「小數」,但是這是最「專業」的方式來拯救我覺得座標..這個sql查詢中的語法錯誤在哪裏?

$"insert into personas values ('" & idpers & "','" & txtNombre.Text & "','" & txtApe.Text & "','" & txtTel.Text & "','" & txtDire.Text & "','" & cboxZona.SelectedItem & "',ST_GeomFromText('POINT('" & txtLatBD.Text & "' '" & txtLngBD.Text & "')'))" 

我想我缺少一個符號的地方,但我不知道在哪裏。當我從控制檯插入相同的數據,它工作正常..

+2

這並不是將SQL長時間放在一起的正確方法。您沒有指定哪些「值」映射到哪個列並將所有內容作爲文本傳遞。使用SQL參數。總是。也請閱讀[問]並參加[遊覽] – Plutonix

+0

我想我現在要拋出一些SQL注入。 – Bugs

回答

1

@Plutonix是正確的 - 但在應對你的語法錯誤的問題,你似乎有額外的引號: 例如:

ST_GeomFromText('POINT(-70.060544 40.28707)'); 

你的(數字替換變量):

ST_GeomFromText('POINT('-70.060544' '40.28707')') 

你的(固定的變量):

ST_GeomFromText('POINT(" & txtLatBD.Text & " " & txtLngBD.Text & ")') 

構造函數的參考:http://www.postgis.org/docs/ST_GeomFromText.html

+0

當我這樣做時,它顯示一個Msgbox,上面寫着「無效的GIS數據提供給函數st_geometryfromtext」。保存在txtLatBD.Text和txtLngBD.Text中的數據是Double。也許我應該在執行查詢之前將數據轉換爲另一種數據類型? – nahuel062

+0

試着將查詢寫出到屏幕上而不是運行它,這樣你就可以看到你得到了什麼。然後你可以直接在DB上運行它 –