Sql server 在VB中使用HierarchyID时出现奇数错误
忽略所有这些,查看下面的更新Sql server 在VB中使用HierarchyID时出现奇数错误,sql-server,vb.net,hierarchyid,Sql Server,Vb.net,Hierarchyid,忽略所有这些,查看下面的更新 在SS 2016中,我有一个简单的表格如下: ID int indentity Code hierarchyid Name varchar(50) Imports System.Data Imports System.Data.SqlClient Imports Microsoft.SqlServer.Types Dim Nodes As New List(Of Node) Using conn As New SqlConnection(My.S
在SS 2016中,我有一个简单的表格如下:
ID int indentity
Code hierarchyid
Name varchar(50)
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.SqlServer.Types
Dim Nodes As New List(Of Node)
Using conn As New SqlConnection(My.Settings.ConnectionString)
com = New SqlCommand("GetInfo", conn)
com.CommandType = CommandType.StoredProcedure
conn.Open()
Dim rdr As SqlDataReader = com.ExecuteReader
While rdr.Read
Nodes.Add(New Node With {.ID = CLng(rdr(0)), .Code = CType(rdr(1), SqlHierarchyId), .Name = CStr(rdr(2))})
End While
End Using
在我的VB应用程序中,我尝试按如下方式读取数据:
ID int indentity
Code hierarchyid
Name varchar(50)
Imports System.Data
Imports System.Data.SqlClient
Imports Microsoft.SqlServer.Types
Dim Nodes As New List(Of Node)
Using conn As New SqlConnection(My.Settings.ConnectionString)
com = New SqlCommand("GetInfo", conn)
com.CommandType = CommandType.StoredProcedure
conn.Open()
Dim rdr As SqlDataReader = com.ExecuteReader
While rdr.Read
Nodes.Add(New Node With {.ID = CLng(rdr(0)), .Code = CType(rdr(1), SqlHierarchyId), .Name = CStr(rdr(2))})
End While
End Using
其中,查询GetInfo只返回SQL表中的所有数据,而节点只是一个包含SQL表中三列的类
当我运行此命令时,会收到一条非常长的错误消息,其开头如下:
System.IO.FileLoadException was unhandled
FileName=Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91
FusionLog==== Pre-bind state information ===
LOG: DisplayName = Microsoft.SqlServer.Types, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91
(Fully-specified)
如果从While循环中删除“.Code=CType(rdr(1),SqlHierarchyId)”,则不会出现错误,节点列表也会正确填充。我的结论是,Hierarchyd的使用在某种程度上导致了这个问题
但是这个错误消息对我来说毫无意义。我能提供的唯一线索是,我对Microsoft.SQLServer.Types的项目引用是版本13.0.0.0,而在错误消息中它被列为版本10.0.0.0。这可能是问题所在,如果是,我将如何着手解决它。如果没有,我应该在哪里寻找问题
如果您认为有帮助,我可以发布整个错误消息。更新
问题确实是SQL Server类型不匹配。如前所述,系统版本的默认类型为“最新”,已过时。因此,我将“latest”替换为“Type System Version=SQL Server 2016”,它给出了一个错误,即该值无效。最后,我发现“Type System Version=SQL Server 2012”可以编译,但它现在需要的是Microsoft.SqlServer.Types,Version=11.0.0.0,这不在我的系统上。我有第13版。所以我仍然有一个版本不匹配的问题。现在的问题是如何指定我的连接字符串来告诉它使用版本13。我找到了答案。我在app.config文件中添加了以下内容:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="10.0.0.0" newVersion="13.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
请注意“newVersion”属性。这就是告诉Visual Studio要使用哪个版本的Microsoft.SqlServer.Types的原因