当我的列是Geography类型时,我应该使用什么SqlDbType枚举?我正在使用MS SQL Server 2008 R2。
这正是我正在寻找的:
// ADO.net - what do I use for the SqlDbType when it's defined
// as Geography in the stored proc
SqlCommand command = new SqlCommand();
command.CommandText = "dbo.up_Foobar_Insert";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@SomeGeographyType", SqlDbType.????);
答案 0 :(得分:12)
SqlGeography
由SQL Server实现为CLR用户定义类型,因此您可以执行以下操作:
SqlGeography geo = // Get the geography from somewhere...
using (SqlCommand command =
new SqlCommand(@"dbo.up_Foobar_Insert", connection))
command.Parameters.Add(new SqlParameter("@Point", geo) { UdtTypeName = "Geography" });
command.ExecuteNonQuery();
}
如果它是桌面应用程序,那么你可以轻松搞定它。 SQL Geometry查看器的Code Project有一个很好的例子,可以帮助桌面或Web。
您需要引用在SQL Server Install / 100 / SDK / Assemblies中找到的Microsoft.SqlServer.Types.dll才能直接使用SQLGeometry或SQLGeography。
答案 1 :(得分:0)
<强>更新强>
试试这个:
//define parameter
command.Parameters.Add("@shape", SqlDbType.NVarChar);
//
//code in between omitted
//
//set value of parameter
command.Parameters["@shape"].Value = feature.Geometry.AsText();
答案 2 :(得分:0)
当我尝试使用SqlDbType.NVarChar
时收到错误消息
无法将参数值从“地理位置”转换为字符串
对我来说解决此问题的方法是使用SqlDbType.Udt
var pgeo = cmd.Parameters.Add("@GeoLocation", SqlDbType.Udt);
pgeo.UdtTypeName = "Geography";
然后,在一个循环中,我设置参数的值:
var ss = new SqlString(objValue.ToString());
var sc = new SqlChars(ss);
var geocode = SqlGeography.STPointFromText(sc, 4326);
cmd.Parameters["@GeoLocation"].Value = geocode;
注意:这需要Microsoft.SqlServer.Types
和System.Data.SqlTypes