Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在VB中使用HierarchyID时出现奇数错误_Sql Server_Vb.net_Hierarchyid - Fatal编程技术网

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的原因