Acessando fluxo de XML de ADO contra SQL Server 2008
-
06-07-2019 - |
Pergunta
Estamos migrando código ASP que utilizou ADO para se conectar ao SQL Server 2000. Para a maior parte do código migraram sem problemas para SQL Server 2008 depois de definir a conexão, mas um tipo de consulta está jogando um erro que me intriga.
Contra SQL 2000, gostaríamos de usar um código como este:
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
O SQL é uma chamada de procedimento armazenado que funciona quando chamado normalmente. Este código continua a trabalhar contra SQL 2000, mas contra SQL 2008, retorna:
ERR_OPENSQLXML XMLDB.openSQLXML falhou. Error '-2147217898': 'dialeto de comando não é suportado por este provedor.'
Meu primeiro palpite é que o SQL Server 2008 depende de MSXML versão 6, e eu preciso de um novo GUID. Meu MSDN e Google-Fu me falhou:. Todos os resultados que eu encontrar usar este GUID
Existe uma nova GUID? Existe uma maneira melhor? É que a melhor maneira menos problemas do que recodificação em ASP.NET (o destino de muitas páginas já).
EDIT: Eu estou querendo saber se usando o cliente SQLNCLI10 é impedindo que esta trabalhando
configConnString =
"Provider=SQLNCLI10;DataTypeCompatibility=80;Server=XYZZY;Database=ucpm;MARS Connection=True;Trusted_Connection=Yes;"
Solução
Ao invés de focalizar a língua que eu não vi documentado como mudou - ASP.dll ainda é suportada na próxima versão do servidor Windows a partir da última verificação que eu fiz.
É possível verificar o cliente que você está conectando a partir de tem o MSSQL Native Client 10 instalado em vez do que o antigo SQL 2000 ODBC / OLEDB clientes.