2009-05-06 2 views
1

Мы переносим ASP-код, который использовал ADO для подключения к SQL Server 2000. По большей части код был перенаправлен без сбоев на SQL Server 2008 после определения соединения, но один тип запрос вызывает ошибку, которая меня озадачивает.Доступ к XML-потоку из ADO в 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 (судьба многих страниц уже).

EDIT: Мне интересно, не работает ли использование клиента SQLNCLI10?

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

Я думаю, что правильный термин Google-Fu;) –

+0

Исправлено :-) Глупое автоматическое исправление орфографии. – Godeke

ответ

1

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

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

+0

Я обновил вопрос с использованием используемой строки соединения. Я использую поставщик SQLNCLI10, который отлично справляется с традиционными параметризованными запросами, а не с потоком XML. – Godeke

+0

Две вещи приносят извинения, если первый покровительствует; установлен sqlxml; в sql 2008 он не установлен по умолчанию. http://msdn.microsoft.com/en-us/library/cc645615.aspx Второй; вы можете попробовать тестовый образец ms предоставить в cscript, чтобы проверить, что все его работающие как ожидалось http://msdn.microsoft.com/en-us/library/ms171785.aspx – u07ch

+0

И нет, проверка, если он установлен, не был покровительственно. Очень часто правильный ответ правильный :) – Godeke

Смежные вопросы