2011-07-26 12 views
0

SQL2005 ExpressデータベースからXMLファイルを作成するために従来のASPを使用する必要があります。私は500エラーを受け取ります。私は自分の問題が接続文字列であると信じていますが、これで新しい道を提供する可能性があるのか​​どうか疑問に思っていました。コードは次のとおりです。XMLを作成するための従来のASPスクリプト

<% 
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を確実にするためには、各レコードのデータフィールドをサニタイズする必要があります。これは少なくとも、迷いのアンパサンド(&)、less -thans(<)、あなたのデータに含まれる可能性のある他のいくつかの迷子文字を探し、文字データが多すぎるため単純に処理できない場合はcdataセクションを使用することを意味します。 –

+0

また、正確なエラーメッセージを見つけることができるはずです。エラー500は、私たちが知りたい実際のエラーを囲むために作成されたHTTPエラーだけです。 –

+0

あなたのエラーに関係しない別のニックは、 '.FileExists()'をチェックすることは良い考えではないということです。代わりに、エラーを適切にチェックして処理するコードで、 'CreateTextFile()'にあなたの呼び出しをラップしてください。 –

答えて

0

私に最も際立つものは接続文字列です。私は"Initial Catalog"の余分なスペースをどのように処理するのかは分かりませんが、mybox.comはデータソースの間違った値であると言えます。内部の名前を使用し、データベースを公開インターネットに公開しないでください。

古典的なASPを使用して以来、長いことを経てきましたが、IIRCの電話番号にアクセスする前に.MoveNext()に電話する必要があります。

最後に、接続を閉じて、コード内のエラーが以前に発生した場合でも、接続とファイルの両方を閉じるコードに正常なエラー処理を使用することを忘れないでください。そうしないと、ファイルまたはデータベースが自分自身でロックされてしまいます。

関連する問題