SqlDb类型和地理

发布于 2024-09-19 16:59:33 字数 421 浏览 3 评论 0原文

当我的列是 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.????);

What SqlDbType enumeration should I use when my column is the Geography type? I'm using MS SQL Server 2008 R2.

This is what I'm looking for specifically:

// 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.????);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

呆橘 2024-09-26 16:59:33

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 查看器的代码项目中有一个很好的示例,可以帮助您适用于桌面或网络。

您需要引用 Microsoft.SqlServer.Types.dll(位于 SQL Server Install/100/SDK/Assemblies 中)才能直接使用 SQLGeometry 或 SQLGeography。

SqlGeography is implemented as a CLR user defined type by SQL Server, so you can do something a little like:

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();
}

If it is a desktop application you've got it quite a bit easier. There is a good example at the Code Project of an SQL Geometry viewer that will help for both desktop or web.

You need to reference Microsoft.SqlServer.Types.dll, found at SQL Server Install/100/SDK/Assemblies to use SQLGeometry or SQLGeography directly.

孤蝉 2024-09-26 16:59:33

更新

试试这个:

//define parameter
command.Parameters.Add("@shape", SqlDbType.NVarChar);
//
//code in between omitted
//
//set value of parameter
command.Parameters["@shape"].Value = feature.Geometry.AsText();

取自使用 SqlCommand 插入 SQL 2008 几何图形

Update

Try this:

//define parameter
command.Parameters.Add("@shape", SqlDbType.NVarChar);
//
//code in between omitted
//
//set value of parameter
command.Parameters["@shape"].Value = feature.Geometry.AsText();

Taken from Inserting SQL 2008 Geometry With a SqlCommand

人事已非 2024-09-26 16:59:33

当我尝试使用 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

When I tried to use SqlDbType.NVarChar I received and error

Failed to convert parameter value from Geography to a String

What resolved this problem for me was to use SqlDbType.Udt

var pgeo = cmd.Parameters.Add("@GeoLocation", SqlDbType.Udt);
pgeo.UdtTypeName = "Geography";

And then later, in a loop, I set the value of the parameter:

var ss = new SqlString(objValue.ToString());
var sc = new SqlChars(ss);
var geocode = SqlGeography.STPointFromText(sc, 4326);
cmd.Parameters["@GeoLocation"].Value = geocode;

Note: this requires Microsoft.SqlServer.Types and System.Data.SqlTypes

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文