VB.NET ADODB.Recordset 和 SQL Server 2019 Latin1_General_100_CI_AI_SC_UTF8 排序规则挂起应用程序
VB.NET ADODB.Recordset and SQL Server 2019 Latin1_General_100_CI_AI_SC_UTF8 Collation hangs application
我需要在仍然使用 ADODB 和记录集的遗留应用程序中添加 UTF8 支持。在 sql 服务器 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 处,我不得不强制退出。
有没有人在 SQL Server 2019 和 ADODB 中使用新的 UTF8 排序规则好运?由于组件很旧,因此没有太多的术语或支持。如果您能提供任何帮助,我们将不胜感激。
ADO 是 OleDb 的包装器,因此您可能正在使用旧的 OleDb 提供程序,例如旧的 SQLOLEDB,或同样旧的 SQLNCLI。
为了连接到 SQL 服务器 ADO 应用程序的现代版本,应始终使用新的 Microsoft OLE DB Driver for SQL Server aka MSOLEDBSQL。
我需要在仍然使用 ADODB 和记录集的遗留应用程序中添加 UTF8 支持。在 sql 服务器 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 处,我不得不强制退出。
有没有人在 SQL Server 2019 和 ADODB 中使用新的 UTF8 排序规则好运?由于组件很旧,因此没有太多的术语或支持。如果您能提供任何帮助,我们将不胜感激。
ADO 是 OleDb 的包装器,因此您可能正在使用旧的 OleDb 提供程序,例如旧的 SQLOLEDB,或同样旧的 SQLNCLI。
为了连接到 SQL 服务器 ADO 应用程序的现代版本,应始终使用新的 Microsoft OLE DB Driver for SQL Server aka MSOLEDBSQL。