0

我正在使用 Npgsql 在 Postgres 数据库上发出参数化的 PostGIS 查询。问题是 Npgsql 使用简写符号转换所有参数化变量,而 PostGIS 在某些情况下不理解转换变量。

例如,假设原始查询以此开头:

ST_GeometryFromText('POLYGON((:x :y,...

Npgsql 把它变成这样:

ST_GeometryFromText('POLYGON((((1278594)::int4) ((1206979)::int4),...

那是行不通的。如果可以省略演员表,它会起作用,如下所示:

ST_GeometryFromText('POLYGON((1278594 1206979,...

显然有UseCast一个参数的属性,但它不是每个 NpgsqlParameter.cs 可设置的。

除了动态构建我的查询之外,我还有其他选择吗?

4

2 回答 2

0

ST_GeometryFromText使用众所周知的文本,因此只需使用string变量来表示 WKT。由于 WKT 与 PostgreSQL 无关,它不能与 SQL 混合,也不能以任何方式进行参数化。该字符串需要使用标准方法与 Npgsql 分开格式化。

如果您正在动态生成自己的几何图形,则可以使用一些几何构造函数,而不是尝试将 WKT 字符串拼凑在一起。如果您发布您尝试动态生成的几何类型,我可以传递一些关于如何参数化的想法。

于 2012-12-09T22:19:33.257 回答
0

Per Francisco Figueiredo Jr. 和 Josh Cooley,Npgsql 的两个主要开发者,目前没有强制 Npgsql 不强制转换参数化值的好方法。

虽然可以将参数设置为 type DbType.Object,这样可以避免强制转换,但这会导致函数调用不明确并可能导致错误。

对于需要进入 WKT 的值,我在处理参数之前对查询使用字符串替换的解决方法。

于 2012-12-10T14:59:32.190 回答