Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过ado.net插入DBGeography类型的正确方法是什么_C#_Sql Server_Entity Framework_Ado.net_Sqlgeography - Fatal编程技术网

C# 通过ado.net插入DBGeography类型的正确方法是什么

C# 通过ado.net插入DBGeography类型的正确方法是什么,c#,sql-server,entity-framework,ado.net,sqlgeography,C#,Sql Server,Entity Framework,Ado.net,Sqlgeography,我试图通过ado.net插入DBGeography类型,但没有成功。 这是我得到的错误: 对象类型中不存在映射 System.Data.Entity.Spatial.DbGeography发送到已知的托管提供程序 本地类型 或: 指定的类型未在目标上注册 server.System.Data.Entity.Spatial.DbGeography、EntityFramework、, 版本=6.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089 这是我从db获得

我试图通过ado.net插入
DBGeography
类型,但没有成功。
这是我得到的错误:

对象类型中不存在映射 System.Data.Entity.Spatial.DbGeography发送到已知的托管提供程序 本地类型

或:

指定的类型未在目标上注册 server.System.Data.Entity.Spatial.DbGeography、EntityFramework、, 版本=6.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089

这是我从db获得它时所做的,它工作正常:

dynamic temp = reader.GetValue(3);

                var text = string.Format("POINT({0:R} {1:R})", temp.Long, temp.Lat);
                var srid = temp.STSrid.Value;
                this.Coordinates = System.Data.Entity.Spatial.DbGeography.PointFromText(text, srid);
但是insert不起作用:

updateCommand.Parameters.AddWithValue("@Coordinates", store.Coordinates);
// or ...
SqlParameter p = new SqlParameter();
                    p.ParameterName = "@Coordinates";
                    p.Value = store.Coordinates;
                    p.SqlDbType = System.Data.SqlDbType.Udt;
                    p.UdtTypeName = "geography";
                    updateCommand.Parameters.Add(p);

这里怎么了?

DbGeography
是为
EntityFramework
而不是
ADO.NET
设计的类型。尝试用方法将一个众所周知的文本模块解析为
SqlGeography
,这应该可以解决您的问题

dynamic temp = reader.GetValue(3);
var text = string.Format("POINT({0:R} {1:R})", temp.Long, temp.Lat);
var coordinate= SqlGeography.Parse(text );

SqlParameter p = new SqlParameter();
                 p.ParameterName = "@Coordinates";
                 p.Value = coordinate;
                 p.SqlDbType = System.Data.SqlDbType.Udt;
                 p.UdtTypeName = "geography";

updateCommand.Parameters.Add(p);
TL;博士:

众所周知的文本(WKT)是一个开放的地理空间联盟(OGC)标准 用于以文本格式表示空间数据的。最 OGC兼容系统支持众所周知的文本。空间功能 在SQL Server 2008、2012和SQL Azure中,可以轻松地在 数据库和WKT中的空间对象。WKT只能存储 单个空间对象的信息和此空间数据格式 通常用作更大文件格式或web服务的一部分 答复。以下是每种几何图形类型的示例 表示为已知文本和等效的Bing Maps类 在解析已知文本字符串时生成

添加这些组件 System.Data.SqlClient;System.Data.SqlTypes;System.Data.SqlServer.Types

我认为地理是错误的(小写)

extensts.UdtTypeName=“地理”

p、 UdtTypeName=“地理”; 或Location=DbGeography.FromText(“点(-122.360 47.656)”)

试试这个

public void InsertArea(string nameParameter, string extentsString)
{
       SqlConnection sqlConn = new SqlConnection(...)

       sqlConn.Open();

       SqlCommand sqlCom = new SqlCommand("INSERT INTO areas (name, extents) VALUES (@name, @extents)", sqlConn);

       sqlCom.Parameters.AddWithValue("@name", nameParameter);

       SqlParamater extents = new SqlParameter("@extents", SqlDbType.Udt);
       extents.UdtTypeName = "Geography";
       extents.Value = GetGeographyFromText(extentsString);

       sqlCom.Parameters.Add(extents);

       sqlCom.ExecuteNonQuery();

       sqlConn.Close();
}

public SqlGeography GetGeographyFromText(String pText)
{
       SqlString ss = new SqlString(pText);
       SqlChars sc = new SqlChars(ss);
       try
       {
           return SqlGeography.STPolyFromText(sc, 4326);
       }
       catch (Exception ex)
       {
           throw ex;
       }
}


 string areaName = "Texas";
       string extents = string.Format("POLYGON(({0} {1}, {0} {2}, {3} {2}, {3} {1}, {0} {1}))", leftLongitude, upperLatitude, lowerLatitude, rightLongitude));

       InsertArea(areaName, extents);

您尝试过这个吗?我尝试过stackverflow的所有解决方案,但都没有成功。错误是“指定的类型未在目标服务器上注册”,似乎缺少一些包。你试过重新安装吗?你查过这个链接了吗你解决过这个问题吗?您是否可以尝试使用Microsoft.SqlServer.Types而不是System.Data.Entity…。通过使用,您可以避免生成命令时的所有猜测。同样,您可以通过使用。对不起,双链接…:O)我在实施此方法时面临以下问题。。。