Paraméterezett lekérdezést próbálok végrehajtani C#-ból, és ezt a hibát kapom:
HIBA: XX000: elemzési hiba – érvénytelen geometria
az utalással
"POLYGON((:m" ‹ -- elemzési hiba a 11. pozícióban a geometrián belül
De amikor a pgAdmin III-ban futtatom a lekérdezést, és lecserélem a paramétereket az értékükre, a lekérdezés működik. A kód az
command.CommandText = "SELECT area_code FROM area WHERE ST_INTERSECTS(ST_GeographyFromText('POLYGON((:minx :miny, :minx :maxy, :maxx :maxy, :maxx :miny, :minx :miny))'), shape) AND area_type_code = :typecode";
command.CommandType = CommandType.Text;
var typeCodeParameter = new NpgsqlParameter
{
DbType = DbType.String,
ParameterName = "typecode",
Value = _typeCode
};
var minxParameter = new NpgsqlParameter
{
DbType = DbType.Double,
ParameterName = "minx",
Value = _minX
};
var minyParameter = new NpgsqlParameter
{
DbType = DbType.Double,
ParameterName = "miny",
Value = _minY
};
var maxxParameter = new NpgsqlParameter
{
DbType = DbType.Double,
ParameterName = "maxx",
Value = _maxX
};
var maxyParameter = new NpgsqlParameter
{
DbType = DbType.Double,
ParameterName = "maxy",
Value = _maxY
};
command.Parameters.Add(typeCodeParameter);
command.Parameters.Add(maxxParameter);
command.Parameters.Add(maxyParameter);
command.Parameters.Add(minxParameter);
command.Parameters.Add(minyParameter);
using (var reader = command.ExecuteReader())
while (reader.Read())
areas.Add((string)reader["area_code"]);
és a működő lekérdezés az
SELECT area_code FROM area WHERE ST_INTERSECTS(ST_GeographyFromText('POLYGON((-1.0042576967558934 50.78431084582985, -1.0042576967558934 51.199216033050647, 1.9400782407441057 51.199216033050647, 1.9400782407441057 50.78431084582985, -1.0042576967558934 50.78431084582985))'), shape) AND area_type_code = 'County'
Mit csinálok rosszul? Hogyan állítsam be a minx, miny, maxx, maxy paramétereket?
ST_GeographyFromText
teljes argumentumát egyetlen karakterlánc-paraméterként. Hacsak aST_GeographyFromText
függvény nem csinál valami igazán furcsát, teljesen biztonságosnak kell lennie, és a végrehajtási terv újrafelhasználható. 14.01.2015