Доступ к потоку XML из ADO против SQL Server 2008 - PullRequest
1 голос
/ 06 мая 2009

Мы переносим код ASP, который использовал ADO для подключения к SQL Server 2000. По большей части код переносился без проблем в 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, и мне нужно новое руководство. Мой MSDN и Google-Fu подвели меня: все результаты, которые я нахожу, используют этот GUID.

Есть новый GUID? Есть ли способ лучше? Разве это не так хлопотно, как перекодирование в ASP.NET (судьба многих страниц уже существует).

РЕДАКТИРОВАТЬ: мне интересно, если использование клиента SQLNCLI10 препятствует этому работать?

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

1 Ответ

1 голос
/ 06 мая 2009

Вместо того, чтобы сосредоточиться на языке, который я не видел задокументированным как измененный - ASP.dll все еще поддерживается в следующей версии сервера Windows с момента последней проверки, которую я сделал.

Можете ли вы проверить, что клиент, с которого вы подключаетесь, имеет установленный MSSQL Native Client 10, а не старые клиенты sql 2000 odbc / oledb.

...