忽略所有这些并看到下面的更新
在SS 2016中,我有一个简单的表格如下:
ID int indentity
Code hierarchyid
Name varchar(50)
在我的VB应用程序中,我尝试按如下方式读取数据:
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表中的所有数据,而Node只是一个包含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)
如果我删除" .Code = CType(rdr(1),SqlHierarchyId)"从While循环内部我没有错误,并且节点列表已正确填充。我的结论是使用HierarchId会以某种方式导致问题。
但错误信息对我没有意义。我可以提供的唯一线索是我对Microsoft.SQLServer.Types的Project引用是版本13.0.0.0,而在错误消息中它被列为版本10.0.0.0这可能是问题,如果是这样,我将如何进行修理它。如果没有,我应该在哪里寻找问题?
如果您认为可能会有所帮助,我可以发布整个错误消息 的更新 问题确实是SQL Server类型不匹配。如上所述here,类型系统版本的默认值是"最新的"这是过时的。所以我更换了#34;最新的"使用"类型系统版本= SQL Server 2016"这给出了一个错误,它是一个无效的值。最后,我发现" Type System Version = SQL Server 2012"将编译好,但它现在需要Microsoft.SqlServer.Types,Version = 11.0.0.0,它不在我的系统上。我有版本13.所以我仍然有版本不匹配的问题。现在的问题是如何指定我的连接字符串以告诉它使用版本13。
答案 0 :(得分:0)
我找到了答案。我在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。