簡體   English   中英

“在ASP.NET控制台應用程序C#中拋出異常:Microsoft.SqlServer.Types.dll中的'System.FormatException'”

[英]“Exception thrown: 'System.FormatException' in Microsoft.SqlServer.Types.dll ” in ASP.NET console application C#

我試圖從緯度,經度點插入一個Sqlgeography列到SQL Server 2016,但我得到了

拋出異常:Microsoft.SqlServer.Types.dll中的“System.FormatException”

我已經在計算機上安裝了SQL Server 2016的Microsoft System CLR類型。 解決此問題的正確方法是什么?

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'(CLR v4.0.30319:DefaultDomain):已加載'C:\\ Windows \\ Microsoft.Net \\ assembly \\ GAC_32 \\ mscorlib \\ v4.0_4.0.0.0__b77a5c561934e089 \\ mscorlib.dll'。 無法找到或打開PDB文件。
'ConsoleApp2.exe'(CLR v4.0.30319:DefaultDomain):已加載'C:\\ Users \\ ssindhu \\ source \\ repos \\ ConsoleApp2 \\ ConsoleApp2 \\ bin \\ Debug \\ ConsoleApp2.exe'。 符號已加載。 'ConsoleApp2.exe'(CLR v4.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'(CLR v4.0.30319:ConsoleApp2.exe):已加載'C:\\ Windows \\ Microsoft.Net \\ assembly \\ GAC_MSIL \\ System \\ v4.0_4.0.0.0__b77a5c561934e089 \\ System.dll'。 無法找到或打開PDB文件。
'ConsoleApp2.exe'(CLR v4.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'(CLR v4.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'(CLR v4.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'(CLR v4.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'(CLR v4.0.30319:ConsoleApp2.exe):已加載'C:\\ Users \\ ssindhu \\ source \\ repos \\ ConsoleApp2 \\ ConsoleApp2 \\ bin \\ Debug \\ Newtonsoft.Json.dll'。 無法找到或打開PDB文件。
'ConsoleApp2.exe'(CLR v4.0.30319:ConsoleApp2.exe):已加載'C:\\ Windows \\ assembly \\ GAC_MSIL \\ Microsoft.SqlServer.Types \\ 14.0.0.0__89845dcd8080cc91 \\ Microsoft.SqlServer.Types.dll'。 無法找到或打開PDB文件。
'ConsoleApp2.exe'(CLR v4.0.30319:ConsoleApp2.exe):已加載'C:\\ Windows \\ Microsoft.Net \\ assembly \\ GAC_32 \\ System.Transactions \\ v4.0_4.0.0.0__b77a5c561934e089 \\ System.Transactions.dll'。 無法找到或打開PDB文件。

這是表模式:

create table all_index_points
(
    id varchar(450) not null primary key,
    latitude float,
    longitude float,
    streetname nvarchar(max),
    longlat geography
);

以下是您的代碼中需要更正的一些內容:

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

如果上述方法無法解決您的問題,也可以共享您的異常的詳細信息以及表字段的可能數據類型。

編輯

除了上面提到的所有問題之外,在調用ExecuteQuery之前,通過附加以下行來解決您遇到的實際問題:

addpoint.Parameters[4].UdtTypeName = "Geography";

由於SQL Server要求您為SqlGeography類型的參數顯式設置UdtTypeName(以及其他一些類型,我在這里沒有提到)。

因此,您更新的代碼應如下所示:

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作為提供的字符串格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM