c#保存字符串到数据库为几何



现在我们得到的几何数据为字符串,我们需要将其保存到我们的SQL DB作为几何类型。

当前,我正在尝试做一些看起来像这样的事情

String shape = "POLYGON((0 0, 150 0, 150 150, 0 150, 0 0))" ;
String insertSQL = "INSERT INTO x (shape) values (@shape)";
SqlCommand cmd = new SqlCommand(insertSql, sqlConnection);
cmd.CommandType = System.Data.Text;
cmd.Parameters.AddWithValue("@shape", "geometry::Parse("+shape+")");
cmd.ExecuteNonQuery();

每次执行查询,我得到一个错误:

{"在执行用户定义的例程或聚合"几何"时发生。net Framework错误:

系统。FormatException: 24114:输入已知文本(WKT)中的标签geometry::Parse('POL)无效。有效的标签有POINT, LINESTRING, POLYGON, MULTIPOINT, MULTILINESTRING, MULTIPOLYGON, GEOMETRYCOLLECTION, CIRCULARSTRING, COMPOUNDCURVE, CURVEPOLYGON和FULLGLOBE(仅限地理数据类型)。

系统。FormatException:

在Microsoft.SqlServer.Types.OpenGisTypes。ParseLabel(字符串输入)在Microsoft.SqlServer.Types.WellKnownTextReader。ParseTaggedText (OpenGisType类型)在Microsoft.SqlServer.Types.WellKnownTextReader。读取(OpenGisType type, Int32 srid)在Microsoft.SqlServer.Types.SqlGeometry。从文本(OpenGisType类型,SqlChars文本,Int32 srid)在Microsoft.SqlServer.Types.SqlGeometry。解析(主题是s)。

语句已终止。"}

是否有一种方法可以在不导入SQL SERVER类型包的情况下本地完成此操作?或者实现这一目标的唯一方法是包含Nuget包并从那里开始?

SQL查询中的参数用于防止SQL注入-这意味着您在查询参数中包含的任何内容都不会被视为数据以外的任何内容,它不会被评估,因此geometry::Parse将不会运行。试试这样做:

String shape = "POLYGON((0 0, 150 0, 150 150, 0 150, 0 0))" ;
String insertSQL = "INSERT INTO x (shape) values (geometry::Parse(@shape))";
SqlCommand cmd = new SqlCommand(insertSql, sqlConnection);
cmd.CommandType = System.Data.Text;
cmd.Parameters.AddWithValue("@shape", shape);
cmd.ExecuteNonQuery();

最新更新