【问题标题】:What is C# equivalent of geography sql server datatype in .net framework 4.0?.net framework 4.0 中的地理 sql server 数据类型的 C# 等效项是什么?
【发布时间】:2014-06-11 02:49:35
【问题描述】:

使用 .net 4.0 框架的网络应用程序。

我有一个在 sql server 2008 R2 中接受地理数据类型的存储过程。

我想将 C# 代码中的数据插入 SQL Server。

但我无法找到我应该在 C# 中使用的与 SQL Server 2008 数据类型等效的数据类型。

【问题讨论】:

  • 我会假设字节[]。取决于您是否使用 ADO.NET、Entity Framework 等。

标签: c# asp.net sql-server sql-server-2008 .net-4.0


【解决方案1】:

这听起来很明显,但为什么不使用已在 SQL Server 中作为 UDT 安装的相同数据类型 - SqlGeography

以下内容适用于 SQL Server 2012 实例。我无法针对 SQL Server 2008 进行测试,但我认为它应该可以正常工作:

using System;
using Microsoft.SqlServer.Types;
using System.Data.SqlClient;
using System.Data;

namespace ConsoleApplication4
{
    class Program
    {
        static void Main()
        {
            var geom1 = SqlGeography.STGeomFromText(
                        new System.Data.SqlTypes.SqlChars(
                        "LINESTRING(-122.360 47.656, -122.343 47.656)"), 4326);
            var geom2 = SqlGeography.STGeomFromText(
                        new System.Data.SqlTypes.SqlChars(
                        "LINESTRING(-100.0 45.0, -1420 49.0)"), 4326);
            using(var conn = new SqlConnection(
                  @"Server=Server;Database=master;Integrated Security=SSPI;"))
            {
                using (var cmd = new SqlCommand(
                    "select @parm1.STIntersects(@parm2)", conn))
                {
                    var p1 = cmd.Parameters.Add("@parm1", SqlDbType.Udt);
                    p1.UdtTypeName = "geography";
                    p1.Value = geom1;
                    var p2 = cmd.Parameters.Add("@parm2", SqlDbType.Udt);
                    p2.UdtTypeName = "geography";
                    p2.Value = geom2;
                    conn.Open();
                    Console.WriteLine(cmd.ExecuteScalar());
                }
            }
            Console.ReadLine();
        }
    }

}

【讨论】:

  • 如果您使用的是 EntityFramework,那么您应该使用DbGeography 作为您的模型属性,该属性使用SqlGeography 在后台
  • @ChrisSchaller - 其他答案已经涵盖了这一点,并且问题中仍然没有迹象表明 OP 是否使用 EF。
【解决方案2】:

如果您使用的是实体框架,那么您搜索的数据类型是 DbGeography。

这里是关于 DbGeography 对象的更多信息 -> Details

【讨论】:

  • DbGeography 在 System.Data.Entity 命名空间中,也就是实体框架...我不知道他在用那个...
【解决方案3】:

不就是DbGeography类吗?

命名空间:System.Data.Spatial 程序集:System.Data.Entity(在 System.Data.Entity.dll 中)

https://msdn.microsoft.com/en-us/library/system.data.spatial.dbgeography.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-30
    • 2012-12-21
    • 2010-10-13
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    相关资源
    最近更新 更多