我们正在迁移使用ADO连接到SQL Server 2000的ASP代码。大多数情况下,代码在定义连接后迁移到SQL Server 2008时没有问题,但是一种类型的查询抛出了令我困惑的错误。从ADO访问针对SQL Server 2008的XML流
针对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;"
我认为正确的名词是Google-Fu;) – 2009-05-06 19:18:24
修正:-)傻傻的自动纠错拼写检查。 – Godeke 2009-05-06 19:42:09