参数化几何sql命令c#在ASP.NET,不工作
本文关键字:NET ASP 工作 sql 命令 参数 | 更新日期: 2023-09-27 17:54:32
我已经使用了这个字符串并使用字符串连接对它进行了测试。但是,正如您所知道的,使用它来格式化sql命令是不安全的。
SqlCommand param = new SqlCommand();
param.CommandText = "INSERT INTO Circle (Center_Point, Circle_Data) VALUES (geometry::STGeomFromText('POINT(@center_lat @center_lng)',0),geometry::STGeomFromText('POLYGON((@polygon))',0));";
param.Parameters.Add(new SqlParameter("@center_lat", center_lat));
param.Parameters.Add(new SqlParameter("@center_lng", center_lng));
param.Parameters.Add(new SqlParameter("@polygon", polygon));
我去参数化字符串,得到以下错误:
System.Data.SqlClient。SqlException (0x80131904):一个。net框架执行用户定义例程或聚合时发生错误"几何":系统。FormatException: 24141:期望在输入的第17位。输入有@center_lat。
看起来没有将值放入字符串中。但是当我遍历代码时,它确实保存了值。
有什么问题吗?
谢谢
感谢我。我必须将正确的程序集添加到ASP.net项目中,这使我能够正确地设置UDT类型。更新后的代码如下。
SqlCommand param = new SqlCommand();
SqlGeometry point = SqlGeometry.Point(center_lat,center_lng,0);
SqlGeometry poly = SqlGeometry.STPolyFromText(new SqlChars(new SqlString(polygon)),0);
param.CommandText = "INSERT INTO Circle (Center_Point, Circle_Data) VALUES (@point,@poly);";
param.Parameters.Add(new SqlParameter("@point", SqlDbType.Udt));
param.Parameters.Add(new SqlParameter("@poly", SqlDbType.Udt));
param.Parameters["@point"].UdtTypeName = "geometry";
param.Parameters["@poly"].UdtTypeName = "geometry";
param.Parameters["@point"].Value = point;
param.Parameters["@poly"].Value = poly;
对于我来说,使用MySQL几何,我必须使用MySqlGeometry类而不是SqlGeometry,就像@SammyG
的答案一样parameters.Add(new
{
...
MyGeometryObject = MySqlGeometry.Parse($"POINT({point.WGS84Lon} {point.WGS84Lat})").Value,
});