You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#将WKT格式几何字符串存入SQL Server Geometry类型字段的方案咨询

问题原因

你当前的写法错误点在于将geometry::Parse的SQL函数调用逻辑直接作为参数值传入,参数化查询会将你传入的整个字符串视为WKT文本内容,相当于数据库最终尝试解析的WKT是geometry::Parse(POLYGON((0 0, 150 0, 150 150, 0 150, 0 0))),显然不符合WKT的格式规范,所以触发格式错误。

无需引入SQL Server Types包的实现方案

你可以直接将geometry::Parse的调用逻辑写在SQL语句中,参数仅传递纯WKT字符串即可,所有几何解析逻辑完全由SQL Server端执行,客户端不需要额外安装任何依赖包:

String shape = "POLYGON((0 0, 150 0, 150 150, 0 150, 0 0))" ;
// 将geometry::Parse内置到SQL语句里,参数仅传入WKT本身
String insertSQL = "INSERT INTO x (shape) values (geometry::Parse(@shape))";

SqlCommand cmd = new SqlCommand(insertSQL, sqlConnection);
cmd.CommandType = System.Data.CommandType.Text;

// 直接传WKT字符串作为参数值即可
cmd.Parameters.AddWithValue("@shape", shape);

cmd.ExecuteNonQuery();

如果你需要指定空间参考标识符(SRID),可以将SQL语句中的方法替换为geometry::STGeomFromText(@shape, 你的SRID数值)。

什么时候需要安装SQL Server Types Nuget包

只有当你需要在C#客户端本地处理Geometry类型数据(比如本地计算几何面积、判断空间相交关系、解析WKT为强类型对象做业务逻辑处理)时,才需要引入Microsoft.SqlServer.Types包,单纯做WKT入库转Geometry类型的场景完全不需要额外依赖。

内容的提问来源于stack exchange,提问作者IvoBardolf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 18:30:01