2010-04-19 4 views
1

J'ai utilisé un ensemble de pages héritées sur mon serveur IIS7 depuis au moins un an. Parfois, quelque chose la semaine dernière a changé et maintenant cette ligne:La page ASP Classic a cessé de fonctionner

Response.Write CStr(myRS(0).name) & "=" & Cstr(myRS(0).value) 

qui permet de revenir rien de plus excitant que la chaîne: « Mise à jour = true » (les params d'entrée de traitement sproc, les stocke à une table, des contrôles d'erreurs et quand cela est tout fait retourne un code de succès en exécutant cette déclaration: sélectionnez « true » que [Mise à jour]

maintenant, mon gestionnaire d'erreurs pageside est impliqué et offre:

myError=Error from /logQuizScore.asp 
Error source: Microsoft VBScript runtime error 
Error number: 13 
Error description: Type mismatch 

Il est important de noter que tous les lots de l'utilisation des pages le même cadre - même db, même format de codage, connecitonstrings et (autant que je sache) tous les autres travaillent.

dépanné à ce point:

L'appel à la procédure stockée fonctionne correctement (substance est stockée à la table donnée). La sortie de la procédure stockée fonctionne correctement (je peux exécuter un appel direct avec les paramètres donnés et tout fonctionne.) Je peux voir le profiler appelant et passant.Je peux remplacer tout le code avec 'select' vrai 'comme mis à jour' et l'erreur est ... même

tout à la déclaration response.write ci-dessus est correct

donc, quelque chose a changé comment ADO rend ce jeu d'enregistrements particulier

Alors je tente: Response.Write myRS.Item.count

et d'obtenir:

Numéro de l'erreur: 424 Description de l'erreur: Objet requis

L'objet recordset ne semble pas être instancié mais l'objet de commande _did execute. Répétez - beaucoup d'autres pages juste la même logique de base pour frapper d'autres sprocs sans problème.

complet extrait de code

set cmd1 = Server.CreateObject("ADODB.Command") 
cmd1.ActiveConnection = MM_cnCompliance4_STRING 
cmd1.CommandText = "dbo._usp_UserAnswers_INSERT" 
... 
cmd1.CommandType = 4 
cmd1.CommandTimeout = 0 
cmd1.Prepared = true 
set myRS = cmd1.Execute 

Response.Write CStr(myRS(0).name) & "=" & Cstr(myRS(0).value) 
+1

Une pensée aléatoire qui m'a frappé - pourrait-il être que «vrai» est en fait interprété comme un booléen, et ne sera donc pas converti en chaîne? Avez-vous essayé d'exécuter quelque chose comme 'SELECT 'hello world' AS [Mise à jour]'? Aussi, avez-vous essayé cela? Cela peut vous aider à comprendre pourquoi vous obtenez l'erreur d'incompatibilité de type ... http://msdn.microsoft.com/fr-fr/library/ms525253.aspx –

+0

Avez-vous déjà essayé de remplacer 'cmd1.CommandText =" SELECT 'true' AS mis à jour "' et 'cmd1.CommandType = 1'? Qu'est-ce qui se passe derrière '...'? – Filburt

+0

pas de changement avec 'hello world' ou 'select 1 as updated'. Au-delà - cette page est en service depuis des années - le code n'a pas changé. L'idée de fliburt de changer le CommandType - intéressant - et cela a fonctionné.L'objet RecordSet a été créé et envoyé à la ligne reponse.write. La partie coupée des snippets était juste la liste de paramètres sous la forme de - cmd1.Parameters.Append cmd1.CreateParameter ("@ Score", 3, 1,4, cmd1__Score). – justSteve

Répondre

0

Il me semble que le sproc a changé et renvoie un scalaire au lieu d'un jeu de résultats.

La modification de CommandType = 1 (adCmdText) doit correspondre à votre requête qui a été remplacée par SELECT 'whateveryouwannatry' AS [updated].

Puisque vous avez indiqué que rien dans le code d'asp n'a changé, nous pouvons exclure que le type de retour de votre commande/sproc ait été modifié en spécifiant un paramètre de sortie.

+0

Pas de changement pour spocs non plus. La semaine dernière, j'ai modifié un paramètre de configuration sur un site différent, mais ce site a été modifié pour - littéralement - des années. – justSteve

Questions connexes