我正在运行Windows 10,VS 2017和SQL Server 2017(版本14.0.1000.169,开发人员版(64位))的x64开发盒上开发C#应用程序。我正在使用AdventureWorks2016
数据库测试我的应用。读取[HumanResources].[Employee]
记录会为数据类型为"DataReader.GetFieldType returned null"
的{{1}}字段引发记录良好的OrganizationNode
异常。
我已经尝试了SO问题[{3}}中描述的前2个答案中的修复,但它们对我没有用处:
我尝试了我机器上可用的dll副本(即添加了一个参考号并将其设为hierarchyId
):
local copy = true
C:\Program Files (x86)\Microsoft SQL Server\120\SDK\Assemblies
C:\Program Files (x86)\Microsoft SQL Server\140\DAC\bin
C:\Program Files (x86)\Microsoft SQL Server\140\SDK\Assemblies
下没有Microsoft.SqlServer.Types.dll
的副本(因此,我假设我的机器上没有64位版本的dll。)
使用C:\Program Files\Microsoft SQL Server
修改连接字符串
我知道我的sql连接和"Type System Version=SQL Server 2012"
命令有效,因为当我从"Fill"
表中读取没有AdventureWorks2016
,hierarchyId
的表时,它可以正常工作,或geography
字段。
geometry
您知道哪个版本的sqlConnection.Open();
sqlCommand.CommandType = CommandType.Text;
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = primaryKeyQueryString;
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
sqlDataAdapter.Fill(dt);
sqlDataAdapter.Dispose();
sqlConnection.Close();
可以解决SQL Server 2017的问题吗?
如果是,我在哪里可以获得它的副本?
我是否需要安装较旧的SQL Server dll并使用我的应用程序进行分发?
答案 0 :(得分:0)
我发现Win 7机器上的Microsoft.SqlServer.Types.dll
版本不在我的Win 10机器上。我使用显式引用依次测试了Win 10机器和Win 7机器中的每个DLL。结果如下:
答案 1 :(得分:0)
这是我所做的:
我从块中安装了Microsoft.SqlServer.Types,在bin文件夹中的Microsoft.SqlServer.Types.dll旁边,您应该在bin中有一个名为SqlServerTypes \ x64和x86的文件夹,这些文件夹也应随应用程序一起部署。 / p>
从块中安装时,您的代码中还有一个名为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系统CLR类型。如果没有,则必须从Microsoft SQL Server 2017 Feature Pack或SQL Server安装程序安装它们 https://www.microsoft.com/en-us/download/details.aspx?id=55992
这些步骤适用于所有版本的SQL Server。如果任何人遇到任何问题,都不要浪费时间以为这是缺少dll问题的服务器,请尝试使用Nugget提供的其他版本的Microsoft.SqlServer.Types,因为较早或更新的版本都可以使用。