我们正在迁移使用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;"
有帮助吗?

解决方案

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top