【问题标题】:c# geography column in datatablec#数据表中的地理列
【发布时间】:2014-01-09 23:12:36
【问题描述】:

我在 c# 中有一个数据表,我想添加一个列来存储地理格式的纬度和经度坐标,然后在 sql server 中进行批量复制。我应该以什么格式为此创建数据列?可以指导一下吗?

【问题讨论】:

    标签: c# sql-server c#-4.0


    【解决方案1】:

    我们必须使用位于下面的参考 dll "C:\Program Files (x86)\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.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);
    

    【讨论】:

      【解决方案2】:

      每一列的类型应与Decimal(9,6) 相似,其中长度为9,精度为6。因此允许最大值可能是180°

      如果你想变得非常挑剔,实际上可以。

      纬度:Decimal(8,6)(赤道南北 0 度最大 90°)

      经度:Decimal(9,6)(最大 180° 到 -180°)

      C#中的十进制格式

      ###.######

      编辑:根据评论。如果要将它们组合在一起,则需要使用 nvarchar(25)(可能小于 25,但留出空间进行格式化)。至于确切的批量复制声明,您需要提供数据样本。

      【讨论】:

      • 嗨尼科!以及如何将Lat,Long的两列通过bulkcopy存储在sql geography列中?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多