1

我们正在迁移使用 ADO 连接到 SQL Server 2000 的 ASP 代码。在大多数情况下,代码在定义连接后顺利迁移到 SQL Server 2008,但是一种类型的查询引发了令我困惑的错误。

针对 SQL 2000,我们将使用如下代码:

set oCommand = Server.CreateObject("ADODB.Command")
oCommand.ActiveConnection = oConn 'already established
oCommand.CommandType = adCmdText 

'This is simplified over the real code, but the wrapper is what we use.
oCommand.CommandText = "<Root xmlns:sql='urn:schemas-microsoft-com:xml-sql'><sql:query>" 
+ Server.HTMLEncode(sql) 
+ "</sql:query></Root>" 

oCommand.Dialect = "{5D531CB2-E6ED-11D2-B252-00C04F681B71}" 'SQL Dialect GUID
oCommand.Properties("Output Stream").Value = oXMLDoc 'Already created
oCommand.Execute , , adExecuteStream 'The point of error

SQL 是一个存储过程调用,在正常调用时工作。此代码继续针对 SQL 2000 工作,但针对 SQL 2008 它返回:

ERR_OPENSQLXML XMLDB.openSQLXML 失败。错误“-2147217898”:“此提供程序不支持命令方言。”

我的第一个猜测是 SQL 2008 依赖于 MSXML 版本 6,我需要一个新的 guid。我的 MSDN 和 Google-Fu 让我失望了:我找到的所有结果都使用这个 GUID。

有新的 GUID 吗?有没有更好的办法?这是否比在 ASP.NET 中重新编码(许多页面的命运已经)更省事了。

编辑:我想知道使用 SQLNCLI10 客户端是否会阻止它工作?

configConnString = 
"Provider=SQLNCLI10;DataTypeCompatibility=80;Server=XYZZY;Database=ucpm;MARS Connection=True;Trusted_Connection=Yes;"
4

1 回答 1

1

而不是专注于我没有看到记录为已更改的语言 - 从我上次检查的下一个版本的 Windows Server 中仍然支持 ASP.dll。

您能否检查您要连接的客户端是否安装了 MSSQL Native Client 10 而不是旧的 sql 2000 odbc/oledb 客户端。

于 2009-05-06T19:39:47.287 回答