C#中DataTable的地理信息列

3

我有一个C#的数据表,想要添加一个列以地理格式存储纬度和经度坐标,并在此之后使用bulkcopy上传到SQL Server。

为此,我应该以什么格式创建这个数据列?

2个回答

7

我们必须使用位于"C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll"下的参考动态链接库(DLL):

using Microsoft.SqlServer.Types;

接下来,我们可以在datatable中创建列,在其中存储一些数据,并通过bulkcopy成功将它们发送到SQL Server。

DataTable dataTable = new DataTable();
dataTable.Columns.Add("Geom", typeof(SqlGeometry));

DataRow newRow = datatable.NewRow();
newRow["Geom"] = SqlGeometry.Point(lat, lon, 4326);

datatable.Rows.Add(newRow);

SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(connection);
sqlBulkCopy.DestinationTableName = "MySpatialDataTable";
sqlBulkCopy.WriteToServer(dataTable);

0
每个列应该与 Decimal(9,6) 类似的类型,其中长度为 9,精度为 6。从而允许最大值可以是 180°
如果您想要非常挑剔,实际上可能是这样。
纬度:Decimal(8,6)(赤道以北或南0度至90度的最大值)
经度:Decimal(9,6)(最大值为-180°至180°)
C#中的十进制格式

###.######

如果您要将它们组合在一起,您需要使用 nvarchar(25)(它可能少于25个字符,但这样可以留出格式复制的空间)。至于确切的批量复制语句,您需要提供数据样本。

你好,Nico!我该如何通过批量复制将Lat和Long两列组合起来存储到SQL地理列中? - George

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接