2009-05-06 46 views
1

我们正在迁移使用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;" 
+0

我认为正确的名词是Google-Fu;) – 2009-05-06 19:18:24

+0

修正:-)傻傻的自动纠错拼写检查。 – Godeke 2009-05-06 19:42:09

回答

1

不是重点,我还没有看到记录为改变语言 - ASP.DLL仍支持在Windows Server从最后一次检查我所做的下一个版本。

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