VB.NET ADODB.Recordset和SQL Server 2019 Latin1_General_100_CI_AI_SC_UTF8排序规则挂起应用程序

问题描述 投票:1回答:1

我需要在仍使用ADODB和记录集的旧版应用程序中添加UTF8支持。在SQL Server 2019中,我已将数据库配置为使用Latin1_General_100_CI_AI_SC_UTF8排序规则。现在,当我尝试将数据查询到记录集中时,我的应用程序就挂起了。我能够将问题定位到配置记录集的代码行。

Connect = CreateObject("ADODB.Connection")
Connect.Open(MyConnectionString) <== Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=servername;Initial Catalog=Test
rs = CreateObject("ADODB.Recordset")
rs.ActiveConnection = Connect
rs.CursorType = ADODB.CursorTypeEnum.adOpenForwardOnly
rs.LockType = ADODB.LockTypeEnum.adLockReadOnly
rs.CursorLocation = ADODB.CursorLocationEnum.adUseClient <== When set, causes the app to hang
rs.Open("SELECT columnName FROM dbo.table")  <== Assumes db collation is set to UTF8. When CursorLocation  is set to client, application will hang here
or
rs.Open("SELECT columnName COLLATE Latin1_General_100_CI_AI_SC_UTF8 FROM dbo.table")  <== When CursorLocation is set to client, application will hang here
If rs.EOF = False Then  <== When CursorLocation is not set to client, application will hang here
    ...
End If
rs.Close()
conn.Close()

当我注释掉那行代码时,我能够加载记录集,但是当我尝试循环它时,应用程序再次在rs.EOF处挂起,我不得不强制退出。

有人在带有ADODB的SQL Server 2019中使用新的UTF8排序规则时感到幸运吗?由于组件很旧,因此在术语或支持方面并没有太多。您可以提供的任何帮助将不胜感激。

sql-server vb.net utf-8 collation adodb
1个回答
0
投票

ADO是OleDb的包装,因此您可能使用的是较旧的OleDb提供程序,例如旧的SQLOLEDB或同样旧的SQLNCLI。

用于连接到现代版本的SQL Server ADO应用程序应始终使用新的Microsoft OLE DB Driver for SQL Server aka MSOLEDBSQL。

© www.soinside.com 2019 - 2024. All rights reserved.