SQL Server 2008에 대한 ADO에서 XML 스트림에 액세스
-
06-07-2019 - |
문제
우리는 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에 의존하고 새로운 GUIND가 필요하다는 것입니다. MSDN과 Google-FU가 실패했습니다. 내가 찾은 모든 결과는이 안내서를 사용합니다.
새로운지도가 있습니까? 더 좋은 방법이 있습니까? ASP.NET (이미 많은 페이지의 운명)에서 기록하는 것보다 번거 로움이 덜 더 나은 방법입니다.
편집 : SQLNCLI10 클라이언트를 사용하는 것이 작동하지 않는지 궁금합니다.
configConnString =
"Provider=SQLNCLI10;DataTypeCompatibility=80;Server=XYZZY;Database=ucpm;MARS Connection=True;Trusted_Connection=Yes;"
해결책
변경된 것으로 문서화되지 않은 언어에 중점을 두지 않고 ASP.DLL은 마지막으로 확인한 다음 Windows Server의 다음 버전에서 여전히 지원됩니다.
연결중인 클라이언트를 확인할 수 있습니까? 기존 SQL 2000 ODBC/OLEDB 클라이언트 대신 MSSQL Native Client 10이 설치되어 있습니다.