2009-07-03 10 views
0

J'ai un TableAdapter qui récupère des lignes à partir d'un stored procedure. Pour une raison quelconque, lorsqu'il n'y a aucun résultat, le TableAdapter retourne un INT avec la valeur 0 au lieu de NULL. La procédure stockée a NOCOUNT ON.TableAdapter renvoie des résultats fantômes dans ASP.NET

Le problème avec ceci est que j'ai un ListView dans le frontend avec un EmptyDataTemplate, qui n'est pas montré. Lorsque j'ai exécuté la requête dans Analyseur de requêtes, je vois qu'il renvoie 0 au lieu de NULL.

La procédure stockée a un simple 'SELECT * FROM WHERE' avec un paramètre INT (NOT Output). En l'exécutant dans Query Analyzer, je n'obtiens aucune sortie, comme prévu.

Que se passe-t-il?

Répondre

1

Il semble que la procédure stockée renvoie le résultat. Toutes les procédures stockées renvoient un code de résultat. C'est très probablement ceci.

+0

En fait, j'ai vérifié que ce n'est pas le cas. L'exécution de la requête dans Query Analyzer n'a renvoyé aucun résultat et, de même, l'exécution de mes autres SP n'ayant aucun résultat dans le Concepteur de jeu de données n'a pas généré ce résultat fantôme. –

+0

Si vous prenez votre procédure stockée dans Sql Server Management Studio et que vous choisissez d'exécuter dans une nouvelle fenêtre, elle affiche un @rc. C'est toujours 0 si le sproc s'exécute et vous ne le changez pas. Ce peut être une coïncidence. –

+0

Ok, vous avez raison - c'est le cas. Cependant, si tel est le cas, tous les SP retournent 0 dans le concepteur de jeu de données lorsqu'ils n'ont aucun résultat? Cela ne semble pas se produire. Et ce qui est vraiment frustrant, c'est que ma ListView ne reconnaisse pas qu'il n'y a aucun résultat. Des pensées sur ce qui pourrait arriver? –

1

Vérifiez la propriété ExcuteMode du tableAdapter pour la requête. Assurez-vous qu'il est réglé sur "Reader". Il y a 3 options pour ExecuteMode:

  1. lecteur - Retourne des lignes de données
  2. Scalar - Retourne la valeur unique
  3. NonQuery - Retourne un int avec le nombre de lignes affectées

Vérifiez également les paramètres Collecte pour un paramètre de valeur de retour. Il devrait avoir des properites AllowDBNull (true si vous autorisez des valeurs nulles), Direction (ReturnValue). Ce paramètre doit contenir les résultats de votre SP. Dans votre exemple, il serait nul puisqu'il n'y avait aucun enregistrement retourné.

Questions connexes