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

Npgsql の 2 人の主要な開発者である Francisco Figueiredo Jr. と Josh Cooley によると、現在、Npgsql にパラメータ化された値をキャストさせないようにする良い方法はありません。

パラメータを type に設定することは可能ですがDbType.Object、キャストを回避できる可能性がありますが、あいまいな関数呼び出しの問題があり、バグを引き起こす可能性があります。

WKT 内に入る必要がある値については、パラメーターが処理される前に、クエリで文字列置換の回避策を使用しています。

于 2012-12-10T14:59:32.190 に答える