首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >System.FormatException控制台应用程序C#中的“异常引发: Microsoft.SqlServer.Types.dll中的‘ASP.NET’”

System.FormatException控制台应用程序C#中的“异常引发: Microsoft.SqlServer.Types.dll中的‘ASP.NET’”
EN

Stack Overflow用户
提问于 2019-04-30 06:17:55
回答 1查看 741关注 0票数 5

我试图插入从纬度、经度点到SQL server 2016的SQL地理列,但我得到了

引发的异常:“System.FormatException”在Microsoft.SqlServer.Types.dll中

我已经在机器上安装了用于Server 2016的类型。解决这个问题的正确方法是什么?

代码语言:javascript
运行
复制
SqlCommand addpoint = new SqlCommand("INSERT INTO " + Helper.TABLE_ALLINDEXPOINTS + "values (@id, @latitude, @longitude, @streetname, @longlat", sqlConnection);
addpoint.Parameters.AddWithValue("@id", id);
addpoint.Parameters.AddWithValue("@latitude",Convert.ToDouble(snappedPoints[j]["latitude"]));
addpoint.Parameters.AddWithValue("@longitude",Convert.ToDouble(snappedPoints[j]["longitude"]));
addpoint.Parameters.AddWithValue("@streetname", snappedPoints[j]["name"].ToString());
addpoint.Parameters.AddWithValue("@longlat", SqlGeography.STGeomFromText(new SqlChars(string.Format("POINT({0} {1})", snappedPoints[j]["latitude"], snappedPoints[j]["longitude"])), Helper.SRID));
addpoint.ExecuteNonQuery();

错误:

“ConsoleApp2.exe”(CLRv4.0.30319: DefaultDomain):已加载的'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'.无法找到或打开PDB文件。 “ConsoleApp2.exe”(CLRv4.0.30319: DefaultDomain):已加载的'C:\Users\ssindhu\source\repos\ConsoleApp2\ConsoleApp2\bin\Debug\ConsoleApp2.exe'.符号已加载。“ConsoleApp2.exe”(CLRv4.0.30319: ConsoleApp2.exe):加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll'.无法找到或打开PDB文件。 “ConsoleApp2.exe”(CLRv4.0.30319: ConsoleApp2.exe):加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll'.无法找到或打开PDB文件。 “ConsoleApp2.exe”(CLRv4.0.30319: ConsoleApp2.exe):加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll'.无法找到或打开PDB文件。 “ConsoleApp2.exe”(CLRv4.0.30319: ConsoleApp2.exe):加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Configuration.dll'.无法找到或打开PDB文件。 “ConsoleApp2.exe”(CLRv4.0.30319: ConsoleApp2.exe):加载'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Xml\v4.0_4.0.0.0__b77a5c561934e089\System.Xml.dll'.无法找到或打开PDB文件。 “ConsoleApp2.exe”(CLRv4.0.30319: ConsoleApp2.exe):加载'C:\Windows\Microsoft.Net\assembly\GAC_32\System.Data\v4.0_4.0.0.0__b77a5c561934e089\System.Data.dll'.无法找到或打开PDB文件。 “ConsoleApp2.exe”(CLRv4.0.30319: ConsoleApp2.exe):加载'C:\Users\ssindhu\source\repos\ConsoleApp2\ConsoleApp2\bin\Debug\Newtonsoft.Json.dll'.无法找到或打开PDB文件。 “ConsoleApp2.exe”(CLRv4.0.30319: ConsoleApp2.exe):加载'C:\Windows\assembly\GAC_MSIL\Microsoft.SqlServer.Types\14.0.0.0__89845dcd8080cc91\Microsoft.SqlServer.Types.dll'.无法找到或打开PDB文件。 “ConsoleApp2.exe”(CLRv4.0.30319: ConsoleApp2.exe):加载'C:\Windows\Microsoft.Net\assembly\GAC_32\System.Transactions\v4.0_4.0.0.0__b77a5c561934e089\System.Transactions.dll'.无法找到或打开PDB文件。

这是表模式:

代码语言:javascript
运行
复制
create table all_index_points
(
    id varchar(450) not null primary key,
    latitude float,
    longitude float,
    streetname nvarchar(max),
    longlat geography
);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-30 06:27:23

下面是您的代码中需要更正的一些内容:

代码语言:javascript
运行
复制
SqlCommand addpoint = new SqlCommand("INSERT INTO " + Helper.TABLE_ALLINDEXPOINTS + " values (@id, @latitude, @longitude, @streetname, @longlat)", sqlConnection);

注意值之前的空格。也缺少了一个关闭支架。

代码语言:javascript
运行
复制
addpoint.Parameters.AddWithValue("@id", id);
addpoint.Parameters.AddWithValue("@latitude",Convert.ToDouble(snappedPoints[j]["latitude"]));
addpoint.Parameters.AddWithValue("@longitude",Convert.ToDouble(snappedPoints[j]["longitude"]));
addpoint.Parameters.AddWithValue("@streetname", snappedPoints[j]["name"].ToString());
addpoint.Parameters.AddWithValue("@longlat", SqlGeography.STGeomFromText(new SqlChars(string.Format("POINT({0} {1})", snappedPoints[j]["latitude"], snappedPoints[j]["longitude"])), Helper.SRID));
addpoint.ExecuteNonQuery();

此外,请共享异常的详细信息以及表字段的可能数据类型,以防上述情况无法解决您的问题。

编辑

除上述所有问题外,您所面临的实际问题将通过在调用ExecuteQuery之前附加以下行来解决:

代码语言:javascript
运行
复制
addpoint.Parameters[4].UdtTypeName = "Geography";

因为Server要求您显式地为SqlGeography类型的参数设置SqlGeography(以及其他一些类型,这里我没有提到)。

因此,更新后的代码应该如下所示:

代码语言:javascript
运行
复制
addpoint.Parameters.AddWithValue("@id", id);
addpoint.Parameters.AddWithValue("@latitude",Convert.ToDouble(snappedPoints[j]["latitude"]));
addpoint.Parameters.AddWithValue("@longitude",Convert.ToDouble(snappedPoints[j]["longitude"]));
addpoint.Parameters.AddWithValue("@streetname", snappedPoints[j]["name"].ToString());
addpoint.Parameters.AddWithValue("@longlat", SqlGeography.STGeomFromText(new SqlChars(string.Format("POINT({0} {1})", snappedPoints[j]["latitude"], snappedPoints[j]["longitude"])), Helper.SRID));
addpoint.Parameters[4].UdtTypeName = "Geography";
addpoint.ExecuteNonQuery();

希望这能解决你所有的问题。

另一个附加的注意事项是使用Helper.SRID = 4326作为提供的字符串格式。

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

https://stackoverflow.com/questions/55914952

复制
相关文章

相似问题

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