У меня были проблемы в течение последнего месяца, и я не могу понять, что не так. Вот настройки и немного фона.
Справочная информация:
У меня есть веб-хост, который выполнял мой веб-сайт на Windows Server 2003 и SQL Server 2000. Одна из моих веб-страниц возвратила набор результатов из хранимой процедуры с сервера SQL в виде xml. Ниже приведен код:
Хранимая процедура:
select top 10
1 as tag
, null as parent
, column1 as [item!1!column1!element]
, column2 as [item!1!column2!element]
from
table1
for XML EXPLICIT
ASP страница: index.asp
Call OpenConn
Set cmd = Server.CreateObject("ADODB.Command")
With cmd
.ActiveConnection = dbc
.CommandText = "name of proc"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("@RetVal", adInteger, adParamReturnValue, 4)
.Parameters.Append .CreateParameter("@Level", adInteger, adParamInput, 4, Level)
End With
Set rsItems = Server.CreateObject("ADODB.Recordset")
With rsItems
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockBatchOptimistic
Set .Source = cmd
.Open
Set .ActiveConnection = Nothing
End With
If NOT rsItems.BOF AND NOT rsItems.EOF Then
OutputXMLQueryResults rsItems,"items"
End If
Set rsItems = Nothing
Set cmd = Nothing
Call CloseConn
Sub OpenConn()
strConn = "Provider=SQLOLEDB;Data Source=[hidden];User Id=[hidden];Password=[hidden];Initial Catalog=[hidden];"
Set dbc = Server.CreateObject("ADODB.Connection")
dbc.open strConn
End Sub
Sub CloseConn()
If IsObject(dbc) Then
If dbc.State = adStateOpen Then
dbc.Close
End If
Set dbc = Nothing
End If
End Sub
Sub OutputXMLQueryResults(RS,RootElementName)
Response.Clear
Response.ContentType = "text/xml"
Response.Codepage = 65001
Response.Charset = "utf-8"
Response.Write ""
Response.Write ""
While Not RS.EOF
Response.Write RS(0).Value
RS.MoveNext
WEnd
Response.Write ""
Response.End
End Sub
Присутствуют:
Все работало отлично, пока мой хост не обновился до Windows Server 2008 и SQL Server 2008. Внезапно я получил такие результаты:
Из браузера:
Китайские иероглифы: браузер http://iphone.rolyrolls.com/chineseChars1.png
Из источника Источник:
Китайские иероглифы: Просмотр источника http://iphone.rolyrolls.com/chineseChars2.png
Однако я обнаружил, что если я использую DSN-соединение strConn = "DSN=[my DSN Name];User Id=[hidden];Password=[hidden];Initial Catalog=[hidden];"
, оно прекрасно работает!
Мой текущий хост больше не будет поддерживать DSN, но это выходит за рамки этой проблемы. Кто-то сказал мне использовать объект ADO.Stream
вместо объекта Recordset, но я не уверен, как это реализовать.
Вопрос:
Кто-нибудь сталкивался с этим и нашел способ это исправить?
Как насчет этого ADO.Stream
объекта, может ли кто-нибудь помочь мне с примером, который будет соответствовать моему коду?