DataReader.GetFieldType返回null

Und*_*ity 13 sql sql-server datareader

在我的数据库表布局中,有一个列类型为hierarchyid(列索引= 4).在尝试设置新环境(从XEN服务器创建的虚拟Web服务器),然后运行该站点时,我遇到了这个问题:

异常消息:DataReader.GetFieldType(4)返回null.异常数据:System.Collections.ListDictionaryInternal

我做了一些搜索,发现已经有一些话题了(比如在MSDN上).

但即使我添加了C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll库,似乎结构SqlHierarchyId中的db类型也无法识别.

"DataReader.GetFieldType(4)返回null的异常"仍然被抛出.

注意:如果我将VS2010中的C#软件包安装到环境(Windows Server 2008 RC2)上,问题将得到解决,但我的老板不接受,因为这纯粹是一个简单的Web服务器.

Pau*_*oza 20

从项目中引用Microsoft.SQLServer.Types dll,并在引用的属性中将其设置为"Copy Local".这将在部署时将该DLL与网站打包在一起.然后,您不需要在Web框上安装所有SQL Server,以便使用SQL Server数据类型.我为我的网站做了这个,因为它使用了geography数据类型列,我得到了同样的错误.

  • 这是解决问题的"正确"方法吗?在sql server中有一个新的数据类型然后我必须使用"copy local"? (2认同)

bgh*_*bgh 8

我试图通过将Microsoft.SqlServer.Types NuGet程序包添加到我的项目中来解决此问题,但仅此一项无济于事。我还必须将以下内容添加到<assemblyBinding>项目的App.config 的元素中:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  .
  .
  .
    <dependentAssembly>
      <assemblyIdentity name="Microsoft.SqlServer.Types" publicKeyToken="89845dcd8080cc91" culture="neutral" />
      <bindingRedirect oldVersion="0.0.0.0-14.0.0.0" newVersion="14.0.0.0" />
    </dependentAssembly>
  .
  .
  .
  </assemblyBinding>
</runtime>
Run Code Online (Sandbox Code Playgroud)


小智 7

对我有用的解决方案是在连接字符串中添加“ Type System Version = SQL Server 2012 ”。

例如:string connectionString =“数据源= myserver;初始目录= mydatabase;用户ID = sa;密码= *******; 类型系统版本= SQL Server 2012; ”;