首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传入地理类型和SQL转换为地理类型?

传入地理类型和SQL转换为地理类型?
EN

Stack Overflow用户
提问于 2013-06-20 15:43:59
回答 2查看 2.8K关注 0票数 3

我正在研究如何获取地理数据(Lat/Lon),并使用地理列将其添加到SQL数据库中。我在引用Microsoft.SqlServer.Types来获取SqlGeographyBuilder

--我还要补充一下,这是在SQL2008r2

我的C#项目也在使用.Net 4.0

这只是我在C#代码中使用的代码片段:

代码语言:javascript
复制
SqlParameter param21 = new SqlParameter();

param21.ParameterName = "@Shape";
param21.UdtTypeName = "Geography";
param21.SqlDbType = System.Data.SqlDbType.Udt;
param21.Size = 1;

SqlGeographyBuilder sqlGeogBuild = new SqlGeographyBuilder();
SqlGeography sqlGeog = null;

sqlGeogBuild.SetSrid(4267);

if (inputReader[parmLatColumnName].ToString().Length > 0 && inputReader[parmLonColumnName].ToString().Length > 0)
{
    sqlGeogBuild.BeginGeography(OpenGisGeographyType.Point);
    sqlGeogBuild.BeginFigure(float.Parse(inputReader[parmLatColumnName].ToString()), float.Parse(inputReader[parmLonColumnName].ToString()));
    sqlGeogBuild.EndFigure();
    sqlGeogBuild.EndGeography();
    sqlGeog = sqlGeogBuild.ConstructedGeography;
    param21.Value = sqlGeog;
}
else
{
    param21.Value = DBNull.Value;
}

sqlComm.Parameters.Add(param21);

当我使用分析器时,我发现我的查询如下:

代码语言:javascript
复制
declare @p21 sys.geography
set @p21=convert(sys.geography,0xE6100000010C00000080B0374040000000806BD057C0)

exec insPoints @stCty=N'31256',@InstrumentType=N'''ogVal''',@FileDate='2008-01-03 00:00:00',@EntryNumber=N'''500''',@Vol=N'NULL',@Page=N'NULL',@Lessor=N'''name''',@Lessee=N'''company name''',@InstrumentDate='2000-01-12 00:00:00',@Term=3,@TermType=N'''Years''',@Expiration='2010-07-12 00:00:00',@Royalty=0.000100000,@GrossAcres=1.000000000,@AgencyId=N'NULL',@Agency=N'''Fee''',@EffDate=NULL,@Survey=N'''A500,A06,A700,A400,A900''',@Longitude=-91.000000000,@Latitude=30.000000000,@Shape=@p21

当我将它作为地理类型传入时,它为什么要将它转换为地理类型?

EN

回答 2

Stack Overflow用户

发布于 2013-06-20 16:05:24

Server允许定义您自己的数据类型。这被称为用户定义的数据类型(UDT)。

您正在使用用户定义的类型来定义@Shape。由于数据库中没有定义单独的用户定义数据类型Georgaphy,因此它将值转换为系统数据类型geography。案件不重要,重要的是

使用SqlPArameter类的不同属性- DbType,而不是直接引用db数据类型,就可以解决这个问题。但是,在geography中没有SqlDbType枚举器成员。

这看起来像是.Net和SQL server之间的差距。尝试设置DbType = "geography",但它不太可能起作用。

票数 1
EN

Stack Overflow用户

发布于 2015-09-26 16:21:40

首先,请查看此文档页@MSDN 操纵UDT数据

因此,在c#中,查询将包含一个UDT数据,首先需要通过SQL(默认行为)将其转换为UDT类型。然后将其作为本机类型处理。同意@Stoleg的观点,即当枚举SqlDbType中定义了一个值时,此转换将不会出现在您的分析器上。

但是今天我们已经发布了.NET 4.6,但是这并没有被添加到这个枚举中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17218050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档