我需要在仍使用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排序规则时感到幸运吗?由于组件很旧,因此在术语或支持方面并没有太多。您可以提供的任何帮助将不胜感激。
ADO是OleDb的包装,因此您可能使用的是较旧的OleDb提供程序,例如旧的SQLOLEDB或同样旧的SQLNCLI。
用于连接到现代版本的SQL Server ADO应用程序应始终使用新的Microsoft OLE DB Driver for SQL Server aka MSOLEDBSQL。