2011-07-26 101 views
0

我需要使用傳統的ASP從SQL2005 express數據庫創建一個XML文件。我正在接受500錯誤。我相信我的問題是連接字符串,我想知道如果我能夠得到一個新的眼睛,這可能爲我提供一個新的途徑。這裏是代碼:經典的ASP腳本來創建XML

<% 
Dim objConn, strConnect, strSQL, rs, tb, objFSO, xmlFile, objWrite 
xmlFile = Server.MapPath("inventory.xml") 
tb = chr(9) 
set objFSO = Server.CreateObject("Scripting.FileSystemObject") 
Set objConn = Server.CreateObject("ADODB.Connection") 
objConn.Open "Provider=SQLOLEDB;Data Source=mybox.com;Initial  Catalog=myDB;UserId=myID;Password=myPW;" 

If Not objFSO.FileExists(xmlFile) Then objFSO.CreateTextFile(xmlFile) 
set objWrite = objFSO.OpenTextFile(xmlFile, 2) 


objWrite.WriteLine("<?xml version=""1.0"" encoding=""ISO-8859-1""?>") 
objWrite.WriteLine("<data>") 

strSQL = "SELECT * FROM table1" 
Set rs = objConn.Execute(StrSQL) 


Do While not rs.EOF 
objWrite.WriteLine(tb & "<marker>") 
objWrite.WriteLine(tb & tb & "<name>" & rs("name") & "</name>") 
objWrite.WriteLine(tb & tb & "<address>" & replace(rs("address"),"&","&amp;") & "</address>") 
objWrite.WriteLine(tb & tb & "<city>" & rs("city") & "</city>") 
objWrite.WriteLine(tb & tb & "<state>" & rs("size") & "</state>") 
objWrite.WriteLine(tb & tb & "<zipcode>" & rs("zipcode") & "</zipcode>") 
objWrite.WriteLine(tb & tb & "<lat>" & rs("lat") & "</lat>") 
objWrite.WriteLine(tb & tb & "<lng>" & rs("lng") & "</lng>") 
objWrite.WriteLine(tb & "</marker>") 
rs.MoveNext 
Loop 


objWrite.WriteLine("</data>") 
objWrite.Close() 
%> 

我很欣賞任何人都可以分享的新鮮視角。 謝謝, - 馬特

+0

與您的500錯誤無關,所以這只是一條評論,但您需要清理每條記錄中的數據字段,以確保輸出中格式良好的xml。這意味着至少要查找數據中可能存在的流浪符號(&),較少的流星符號(<)和其他一些雜散字符,並且如果字符數據太多以至於無法簡單處理,則可能使用cdata節。 –

+0

此外,你應該能夠找到確切的錯誤信息。錯誤500只是創建的環繞我們想知道的真實錯誤的http錯誤。 –

+0

與你的錯誤無關的另一個挑剔是檢查'.FileExists()'不是一個好主意。相反,將代碼中的調用包裝爲'CreateTextFile()'來檢查並正確處理錯誤。 –

回答

0

對我而言最突出的是你的連接字符串。我不確定它如何處理"Initial Catalog"中的多餘空格,但我可以說mybox.com幾乎肯定是數據源的錯誤值。您應該在那裏使用內部名稱,而不要將數據庫暴露給公共互聯網。

另外,從使用經典asp開始已經很長時間了,但是在訪問循環頂部的任何記錄—而不是底部之前,您需要調用.MoveNext()

最後,不要忘記關閉連接,並在那裏使用良好的錯誤處理,以確保它會到達關閉連接和文件的代碼,即使代碼中出現錯誤。否則,你最終會鎖定自己的文件或數據庫。