ASP Classic, SQL 2008, XML Output и DSN vs DSN-Less выпускают китайские буквы - PullRequest
0 голосов
/ 21 апреля 2010

У меня были проблемы в течение последнего месяца, и я не могу понять, что не так. Вот настройки и немного фона.

Справочная информация:

У меня есть веб-хост, который выполнял мой веб-сайт на 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 объекта, может ли кто-нибудь помочь мне с примером, который будет соответствовать моему коду?

1 Ответ

0 голосов
/ 22 апреля 2010

Вы можете проверить connectionstrings.com .


редактировать

Мне кажется, проблема с драйвером базы данных - какой драйвер использует ваше DSN-соединение?

обновление

connectionstrings.com перечисляет собственное соединение SQL с Provider=SQLNCLI10, но когда я генерирую файл подключения .udl для этого провайдера, он говорит Provider=SQLNCLI10.1, так что это может стоить попытки (если вы еще не пробовали это).

...