2011-07-26 3 views
0

J'ai besoin d'utiliser ASP classique pour créer un fichier XML à partir d'une base de données express SQL2005. Je reçois une erreur de 500. Je crois que mon problème est la chaîne de connexion, je me demandais si je pouvais obtenir un nouvel oeil sur ce sujet pour éventuellement me fournir une nouvelle avenue. Voici le code:Script ASP classique pour créer 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() 
%> 

J'apprécie toute nouvelle perspective que n'importe qui peut partager. Merci, --Matt

+0

Sans lien avec votre erreur 500, il ne s'agit que d'un commentaire, mais vous devez nettoyer les champs de données de chaque enregistrement pour garantir un format XML bien formé dans votre sortie. Cela signifie au minimum rechercher des esperluettes parasites (&), moins -thans (<) et quelques autres caractères parasites qui peuvent être dans vos données, et peut-être utiliser des sections cdata si vos données de caractères sont trop variées pour le gérer simplement. –

+0

En outre, vous devriez être capable de trouver le message d'erreur exact. Erreur 500 est seulement l'erreur http créée pour enrouler autour de la vraie erreur que nous voulons savoir. –

+0

Un autre nitpick non lié à votre erreur est que ce n'est pas une bonne idée de vérifier '.FileExists()'. Au lieu de cela, enveloppez votre appel à 'CreateTextFile()' dans le code qui vérifie et gère l'erreur de manière appropriée. –

Répondre

0

Ce qui me distingue le plus est votre chaîne de connexion. Je ne suis pas sûr comment il gère les espaces supplémentaires dans "Initial Catalog", mais je peux dire que mybox.com est presque certainement la mauvaise valeur pour la source de données. Vous devriez utiliser un nom interne et ne pas exposer votre base de données à l'Internet public.

En outre, cela fait longtemps que j'ai utilisé l'ASP classique, mais IIRC vous devez appeler .MoveNext() avant d'accéder à tous les enregistrements — en haut de la boucle plutôt que le bas. Enfin, n'oubliez pas de fermer votre connexion et d'utiliser une bonne gestion des erreurs pour vous assurer qu'elle atteindra le code qui ferme à la fois la connexion et le fichier, même si une erreur se produit plus tôt dans le code. Sinon, vous finirez par verrouiller le fichier ou la base de données sur vous-même.