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
C# 哪个版本的Microsoft.SqlServer.Types.dll修复了SQL Server 2017的“DataReader.GetFieldType返回null”错误?_C#_Sql Server_Exception - Fatal编程技术网

C# 哪个版本的Microsoft.SqlServer.Types.dll修复了SQL Server 2017的“DataReader.GetFieldType返回null”错误?

C# 哪个版本的Microsoft.SqlServer.Types.dll修复了SQL Server 2017的“DataReader.GetFieldType返回null”错误?,c#,sql-server,exception,C#,Sql Server,Exception,我正在运行Windows10、VS2017和SQLServer2017版本14.0.1000.169、开发者版64位的x64开发盒上开发一个C应用程序。我正在用AdventureWorks2016数据库测试我的应用程序。读取[HumanResources].[Employee]记录会引发记录良好的DataReader。GetFieldType为datatype为hierarchyId的OrganizationNode字段返回null异常 我尝试了SO问题中描述的前2个答案中的修复,但它们对我不起

我正在运行Windows10、VS2017和SQLServer2017版本14.0.1000.169、开发者版64位的x64开发盒上开发一个C应用程序。我正在用AdventureWorks2016数据库测试我的应用程序。读取[HumanResources].[Employee]记录会引发记录良好的DataReader。GetFieldType为datatype为hierarchyId的OrganizationNode字段返回null异常

我尝试了SO问题中描述的前2个答案中的修复,但它们对我不起作用:

我尝试了机器上可用的dll副本,即,向dll添加了一个引用,并使其为local copy=true:

C:\Program Files x86\Microsoft SQL Server\120\SDK\Assembly C:\ProgramFilesx86\Microsoft SQL Server\140\DAC\bin C:\ProgramFilesx86\Microsoft SQL Server\140\SDK\Assembly

C:\Program Files\Microsoft SQL Server下没有Microsoft.SqlServer.Types.dll的副本,因此,我假设我的计算机上没有64位版本的dll

修改类型为System Version=SQL Server 2012的连接字符串也不起作用

我知道我的sql连接和填充命令可以工作,因为当我从AdventureWorks2016表中读取没有hierarchyId、geography或geometry字段的记录时,它可以正常工作

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

如果是,我在哪里可以得到它的副本


我是否需要安装旧的SQL server dll并将其与我的应用程序一起分发?

我发现Win 7计算机上没有Microsoft.SqlServer.Types.dll版本。我使用显式引用依次测试了Win10机器和Win7机器上的每个DLL。结果如下:

2009.100.2500.0,6-17-2011工程 2014.120.2000.8 2014年2月21日失败 2014.120.5000.0,2016年6月18日 2011.110.2832.252017年8月15日 2017.140.1000.169,8-22-2017失败 2017.140.500.272,2-1-2018失败
以下是我所做的:

我从nugget安装了Microsoft.SqlServer.Types,您应该在bin文件夹中有一个名为SqlServerTypes\x64和x86的文件夹,该文件夹也应该与您的应用程序一起部署,位于bin文件夹中的Microsoft.SqlServer.Types.dll旁边

从nugget安装时,代码中还有一个名为SQLServerTypes\Loader.cs的新文件夹。如果使用VB加载一些低级依赖项msvcr1x0.dll和SqlServerSpatial1x0.dll,请将其转换为VB

在Windows server 2019上的SQL server 2017服务器上,我只能通过安装Microsoft.SqlServer.Types 11.0.2版来实现这一点。最近的版本并没有解决这个问题

当我引用这些版本时,GetFieldType识别出了空间类型,一切都很顺利

在深入研究这个问题一段时间后,如果问题仍然存在,我建议尝试其他版本,因为这就是解决这个问题的方法

还要确认您的SQL Server安装已安装Microsoft System CLR Types for SQL Server 2017。如果没有,则必须从Microsoft SQL Server 2017功能包或SQL Server安装程序安装

这些步骤适用于所有版本的SQL Server。如果有人遇到任何问题,不要浪费时间认为这是服务器缺少dll的问题,只需尝试Nugget的Microsoft.SqlServer.Types的不同版本,因为旧版本或新版本都可以

sqlConnection.Open();
sqlCommand.CommandType = CommandType.Text;
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = primaryKeyQueryString;

SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
sqlDataAdapter.Fill(dt);

sqlDataAdapter.Dispose();
sqlConnection.Close();