过去一个月我一直遇到问题,似乎无法弄清楚出了什么问题。这是设置和一点背景。
我有一个在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
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.突然之间我得到了这样的结果:
Chinese Characters: Browser http://iphone.rolyrolls.com/chineseChars1.png
Chinese Characters: View Source 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
对象怎么样,有人可以帮我提供一个适合我代码的样本吗?
答案 0 :(得分:0)
您可以查看connectionstrings.com。
修改的
对我来说,这似乎是一个数据库驱动程序问题 - 哪个驱动程序使用您的DSN连接?
更新
connectionstrings.com列出了与Provider=SQLNCLI10
的SQL Native连接,但是当我为此提供程序生成.udl连接文件时,它显示Provider=SQLNCLI10.1
所以这可能值得一试(如果你还没有尝试过这个) )。