空记录集值 - sql 服务器 2017

empty recordset values - sql server 2017

我总是在我的代码中使用这个连接字符串来连接到 sql 服务器:

"Driver={SQL Server};Server=SERVER_ADDRESS;Database=DBNAME;User Id=MYUSER;Password=******;"

在一个新网站中,当我在真实服务器上部署项目时,我注意到由于 sql 服务器版本:

,我必须使用新的连接字符串
"Driver={ODBC Driver 17 for SQL Server};Server=SERVER_ADDRESS;Database=DBNAME;User Id=MYUSER;Password=*****;"

连接正常,网站运行正常,但记录集中的所有值都是空的! 我有 5 个菜单,因为数据库中有 5 条记录,但所有菜单都显示空文本! 事实上,所有文本都是空的,但数据库中有文本记录(当我使用 SSMS 检查时)。我是否需要向我的代码或连接字符串中添加一些新内容?

这是我从数据库中获取数据的方式:

Set objcon = Server.CreateObject("ADODB.Connection")
objcon.connectionString="Driver={ODBC Driver 17 for SQL Server};Server=SERVER_ADDRESS;Database=DBNAME;User Id=MYUSER;Password=*****;"
objcon.Open
Set rs= Server.CreateObject("ADODB.RecordSet")
rs.CursorType = 2
rs.open "select * from  menu",objcon
while not rs.eof
  Response.Write rs("title")   'I get 5 empty texts here as I have 5 record in database
rs.movenext
wend
rs.close

最好将OLE DB 与ADO classic 一起使用。 ADO 本身是基于 COM 的 API,并在 ODBC 调用级接口之上使用 MSDASQL(用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序),添加了一个附加层 API。

Windows 附带 SQLOLEDB(SQL 服务器的 Microsoft OLE DB 提供程序)以实现向后兼容性。此驱动程序旨在仅用于遗留应用程序 APIs,如 ADO classic。 ADO classic 永远停留在 SQL 2000 年的世界,缺少对最近 20 年引入的较新 SQL 服务器数据类型的数据类型映射。 With 最好还指定 DataTypeCompatibility=80 连接字符串关键字以避免意外。

您还可以在 SQLOLEDB 和 MSOLEDBSQL 之间使用 MSOLEDBSQL driver (Microsoft OLE DB Driver for SQL Server), which is a separate download as are all modern SQL Server drivers. However, there are behavior differences,这可能需要额外的应用程序测试。