ExecuteReader ne retourne aucun résultat, lors de l'inspection de la requête n'
Considérons le code suivant:
StringBuilder textResults = new StringBuilder();
using(SqlConnection connection = new SqlConnection(GetEntityConnectionString()))
{
connection.Open();
m.Connection = connection;
SqlDataReader results = m.ExecuteReader();
while (results.Read())
{
textResults.Append(String.Format("{0}", results[0]));
}
}
J'ai utilisé le Moniteur d'Activité au sein de Sql Server Mgmt Studio sur la base de données pour inspecter l'exacte requête qui a été envoyé. J'ai ensuite copié que le texte de la requête à une requête de la fenêtre de l'éditeur dans SSMS, et la requête a retourné les résultats attendus. Cependant, SqlDataReader results
est toujours vide, indiquant que "La énumération n'a donné aucun résultat."
Mon soupçon est que d'une certaine manière les résultats ne sont pas retournés correctement, ce qui me fait penser à il ya quelque chose de mal avec le code ci-dessus, et non dans la requête elle-même étant passé.
Est-il quelque chose qui serait à l'origine dans le code ci-dessus? Ou quelque chose que j'ai négligé?
EDIT:
Voici la requête, comme indiqué par l'objet SQLCommand:
SELECT DISTINCT StandardId,Number
FROM vStandardsAndRequirements
WHERE StandardId IN ('@param1','@param2','@param3')
ORDER BY StandardId
Voici la requête, tel qu'il apparaît dans le Moniteur d'Activité:
SELECT DISTINCT StandardId,Number
FROM vStandardsAndRequirements
WHERE StandardId IN ('ABC-001-0','ABC-001-0.1','ABC-001-0')
ORDER BY StandardId
De la requête à l'encontre d'un seul point de vue.
Quand j'ai couru la deuxième requête sur la base de données, il est revenu 3 lignes.
Le SqlDataReader indique 0 lignes.
OriginalL'auteur morganpdx | 2011-02-09
Vous devez vous connecter pour publier un commentaire.
essayez d'utiliser Sqldata de l'adaptateur à la place de sqldatreader.
Ce qui concerne.
OriginalL'auteur Crimsonland
Vous êtes sûr que c'est
au lieu de cela?
Paramètres ne doit pas être cité, non pas dans l'objet SQLCommand.
Pourquoi pensez-vous que vous devriez avoir 3 lignes? Si StandardId est unique, je pense que 2 lignes max, étant donné
WHERE StandardId IN ('ABC-001-0','ABC-001-0.1','ABC-001-0')
param1 et param3 sont les mêmes.textResults est également ajoutant tous les résultats ensemble, sans virgules, des tuyaux ou d'autres séparateur. Tout ce que vous obtenez est une chaîne de caractères, il est donc difficile de voir si il y a plusieurs résultats.
oups - c'était une faute de frappe sur le dernier param, devrait être de l'ABC-001-0a. Comme pour textResults, j'ai été vérifier effectivement la sortie de la SqlDataReader pour le nombre de lignes, c'est pourquoi je ne l'ai pas remarqué. Merci!
OriginalL'auteur RichardTheKiwi
Vérifier votre chaîne de connexion et assurez-vous que vous n'êtes pas connecté en tant qu'utilisateur de l'instance.
http://msdn.microsoft.com/en-us/library/ms254504.aspx
OriginalL'auteur dretzlaff17
Très belle comportement que j'ai observé
J'ai regardé pour les erreurs dans le code:
et a constaté que " dr.Lire " fonctionne très bien, mais...
quand j'ai passer la souris sur "dr", à la recherche des données, les valeurs de retour a disparu !
OriginalL'auteur lyolikaa