mor*_*are 8 .net c# sql-server sqlbulkcopy sqlgeometry
我正在尝试批量复制DataTable包含以下列的内容:
System.Int32System.String使用以下列进入SQL数据库:
intgeometry谁能建议最好的方法来做到这一点?
一些测试代码,如果它有帮助......
DataTable dataTable = new DataTable();
dataTable.Columns.Add("ID", typeof(Int32));
dataTable.Columns.Add("Geom", typeof(String));
dataTable.Rows.Add(1, "POINT('20,20')");
dataTable.Rows.Add(1, "POINT('40,25')");
dataTable.Rows.Add(1, "POINT('60,30')");
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection);
sqlBulkCopy.DestinationTableName = "MySpatialDataTable";
sqlBulkCopy.WriteToServer(dataTable);
Run Code Online (Sandbox Code Playgroud)
我的原始帖子未能解释执行上述操作会导致抛出以下异常.
InvalidOperationException:数据源中String类型的给定值无法转换为指定目标列的类型udt.
我假设从这里SqlBulkCopy不知道geometry列类型,因此不知道如何从a转换为它string.谁能证实这一点?
Dav*_*vre 11
您的"Geom"列需要是type SqlGeometry,而不是字符串.Sql Server将期望插入的几何列的用户定义类型(UDT).这是我会用的:
DataTable dataTable = new DataTable();
dataTable.Columns.Add("ID", typeof(Int32));
dataTable.Columns.Add("Geom", typeof(SqlGeometry));
dataTable.Rows.Add(1, SqlGeometry.STGeomFromText("POINT('20,20')"));
dataTable.Rows.Add(2, SqlGeometry.STGeomFromText("POINT('40,25')"));
dataTable.Rows.Add(3, SqlGeometry.STGeomFromText("POINT('60,30')"));
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection);
sqlBulkCopy.DestinationTableName = "MySpatialDataTable";
sqlBulkCopy.WriteToServer(dataTable);
Run Code Online (Sandbox Code Playgroud)
请注意,我们从您的字符串构造实际的SqlGeometry类型.批量插入将负责将其转换为SqlServer将识别的二进制格式.
另外,我不确定为什么要插入具有相同ID的多个记录(样本中的所有ID都是1).
祝好运!
| 归档时间: |
|
| 查看次数: |
4978 次 |
| 最近记录: |