哪个版本的Microsoft.SqlServer.Types.dll可以解决SQL Server 2017 "DataReader.GetFieldType returned null"错误?



我正在运行Windows 10,VS 2017和SQL Server 2017(VER 14.0.1000.169,开发人员版(64位((上开发C#应用程序。我正在使用AdventureWorks2016数据库测试我的应用程序。读取 [HumanResources].[Employee]记录为 OrganizationNode datatype的 CC_4字段提供了有据可查的 "DataReader.GetFieldType returned null"例外。

我已经尝试了so问题datareader中描述的前2个答案的修复程序。getFieldType返回null,但它们对我不起作用:

  1. 我尝试了机器上可用的DLL的副本(即,在DLL中添加了REF并将其制成local copy = true(:

    • C:Program Files (x86)Microsoft SQL Server120SDKAssemblies
    • C:Program Files (x86)Microsoft SQL Server140DACbin
    • C:Program Files (x86)Microsoft SQL Server140SDKAssemblies

    • C:Program FilesMicrosoft SQL Server下没有Microsoft.SqlServer.Types.dll的副本(我认为,DLL的64位版本都在我的机器上(。

  2. 使用"Type System Version=SQL Server 2012"修改连接字符串也无法正常工作

我知道我的SQL连接和"Fill"命令工作,因为当我从没有hierarchyIdgeographygeometry字段的AdventureWorks2016表中读取记录时,它可以正常工作。

sqlConnection.Open();
sqlCommand.CommandType = CommandType.Text;
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = primaryKeyQueryString;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
sqlDataAdapter.Fill(dt);
sqlDataAdapter.Dispose();
sqlConnection.Close();

您知道哪个版本的Microsoft.SqlServer.Types.dll可以解决SQL Server 2017的问题?

如果是这样,我可以在哪里获得它的副本?

我需要安装旧的SQL Server DLL并使用我的应用程序分配?

这是我所做的:

i从掘金中安装了Microsoft.sqlserver.types,您应该在垃圾箱中使用一个称为sqlServerTypes x64和x86的文件夹,该文件夹也应与您的应用程序一起部署Microsoft.sqlserver.sqlserver.types.dll

从掘金安装时,您的代码中还具有一个新文件夹,称为sqlServerTypes loader.cs(如果使用VB,则将其转换为VB(加载一些低级依赖关系(MSVCR1X0.DLL和SQLSERVERSPATIAL1X0.DLL(。

在Windows Server 2019上使用SQL Server 2017的服务器上,我只能通过安装Microsoft.sqlserver.types版本11.0.2来完成此工作。最近的版本没有解决这个问题。

当我引用这些版本时,getfieldType识别出空间类型,一切都顺利进行。

一段时间后,我建议您尝试其他版本,如果问题持续存在,因为这是解决此问题的方法。

还确认您的SQL Server安装具有安装SQL Server 2017的Microsoft System CLR类型。如果不是,则必须从Microsoft SQL Server 2017功能包或SQL Server设置安装它们https://www.microsoft.com/en-us/download/details.aspx?id=55992

这些步骤适用于所有版本的SQL Server。

我发现了一台Win 7机器,其中 Microsoft.SqlServer.Types.dll的版本不在我的win 10机器上。我从Win 10 Machine和Win 7机器依次使用明确的参考测试了每个DLL。这是结果:

  1. 2009.100.2500.0,(6-17-2011(作品
  2. 2014.120.2000.8(2/21/2014(失败
  3. 2014.120.5000.0,(6-18-2016(失败
  4. 2011.110.2832.25,(8-15-2017(失败
  5. 2017.140.1000.169,(8-22-2017(失败
  6. 2017.140.500.272,(2-1-2018(失败

使用(最古老的(版本10.50.1600.1为我修复了此问题。

复制microsoft.sqlserver.types.dll到项目的root文件夹,并将项目中的引用更改为此文件(删除旧旧引用并设置新的引用(像这样:c: work windowsapp1

相关内容

最新更新