先月から問題が発生しており、何が問題なのかわかりません。ここにセットアップと少しの背景があります。
バックグラウンド:
Windows Server 2003 および SQL Server 2000 で Web サイトを実行していた Web ホストがあります。Web ページの 1 つで、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
strConn = "DSN=[my DSN Name];User Id=[hidden];Password=[hidden];Initial Catalog=[hidden];"
しかし、DSN 接続を使用すると、完全に正常に動作することがわかりました。
私の現在のホストは DSN をサポートしなくなりますが、それはこの問題の範囲外です。Recordset オブジェクトの代わりにオブジェクトを使用するように誰かに言われましたADO.Stream
が、それを実装する方法がわかりません。
質問:
誰かがこれに遭遇し、それを修正する方法を見つけましたか?
そのオブジェクトはどうですかADO.Stream
、誰かが私のコードに合うサンプルを手伝ってくれますか?