【问题标题】:How to set InsertCommand parameter as function call?如何将 InsertCommand 参数设置为函数调用?
【发布时间】:2013-04-07 08:20:54
【问题描述】:

我正在开发一个使用带有 PostGIS 扩展的 PostgreSQL 数据库的 GIS 应用程序。我已经为整个项目创建了数据访问逻辑,除了几何值插入之外一切正常。

我必须将几何值作为函数调用传递:

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

如您所见,我必须在 INSERT 上调用 ST_GeomFromText PostGIS 函数来获取 geom 列值。此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 命令文本是:

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

geom 参数 DbType 是 String。函数调用没有 DbType!

【问题讨论】:

  • 我对每一列都使用参数。 InsertCommand CommandText 是:INSERT INTO mygeotable (id, name, geom) VALUES (id, name, geom)。几何参数 DbType 是字符串。函数调用没有 DbType!

标签: c# postgresql ado.net postgis dataadapter


【解决方案1】:

将参数作为数字传递给函数,而不是传递整个函数调用:

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

顺便说一句,"MyName" 中的双引号不会生成有效字符串,因为它们是为标识符保留的。字符串应该用单引号括起来。

【讨论】:

  • 你说得对!双引号无效,我只是在这里快速输入。所以问题是当我设置值时: row["geom"] = "ST_GeomFromText('POINT(1, 2)', 23700)" 然后调用 adapter.Update(table) 它会抛出一个“无效的几何”异常,这意味着插入命令文本错误,因为从 sql 窗格中我可以运行相同的查询而不会出错。
  • 如果您想传递数字 XY 值来表达观点,请改用 ST_MakePoint(X, Y)。此外,您可能需要将其包装在 ST_SetSRID(geom, 23700) 中以设置 SRID。 More info here
猜你喜欢
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多