2013-04-15 27 views
3

我在使用PostgreSQL數據庫和PostGIS擴展的GIS應用程序。我已經爲整個項目創建了數據訪問邏輯,除了幾何值插入之外,一切都很好。如何設置InsertCommand參數作爲函數調用?

我要傳遞幾何值的函數調用:

INSERT INTO mygeotable (id, name, geom) VALUES 
    (1, "MyName", ST_GeomFromText('POINT(755888.4156 112458.556)', 23700)) 

正如你可以看到我有打電話給ST_GeomFromText PostGIS的功能上INSERTgeom列值。這個geom列是ADO.NET視圖中的字符串值,但它不能設置爲INSERT上的文本。

我想ADO.NET自動格式化我INSERT命令是這樣的:

INSERT INTO mygeotable (id, name, geom) VALUES 
    (1, "MyName", "ST_GeomFromText('POINT(755888.4156 112458.556)', 23700)") 

這是因爲引號的錯!

如何設置INSERT命令的geom參數使用ST_GeomFromText函數調用?

我使用每列的參數。 InsertCommand CommandText是:

INSERT INTO mygeotable (id, name, geom) VALUES (id, name, geom) 

geom參數DbType是字符串。函數調用沒有DbType!

+0

我使用每列的參數。 InsertCommand CommandText是:INSERT INTO mygeotable(id,name,geom)VALUES(id,name,geom)。 geom參數DbType是String。函數調用沒有DbType! – ggabor

回答

1

傳遞參數的功能號碼,而不是通過整個函數調用:因爲它們已保留標識符

INSERT INTO mygeotable (id, name, geom) VALUES 
    (id, name, ST_GeomFromText('POINT(X Y)', Z)) 

"MyName" BTW雙引號不進行有效的字符串。字符串應該用單引號括起來。

+0

你對!雙引號是無效的,我只是在這裏輸入很快。所以問題是當我設置值:row [「geom」] =「ST_GeomFromText('POINT(1,2)',23700)」,然後調用adapter.Update(表)它會拋出一個「無效的gemoetry」異常,這意味着插入命令文本是錯誤的,因爲從SQL窗格我可以運行相同的查詢沒有錯誤。 – ggabor

+0

如果你想傳遞數值'X'和'Y'來表示一個點,可以用'ST_MakePoint(X,Y)'代替。此外,您可能需要將其封裝在'ST_SetSRID(geom,23700)'中以設置SRID。 [更多信息](http://gis.stackexchange.com/questions/24486/how-to-insert-a-point-into-postgis/24487#24487) –

相關問題