2010-01-07 3 views
0

Lorsque j'exécute ce SQl dans mon application mobile, je n'ai aucune ligne. Lorsque j'exécute le même SQL dans Query Analyzer 3.5 en utilisant la même base de données, je reçois ma ligne attendue.SqlCe résultats impairs pourquoi? - Même SQL, résultats différents dans différentes applications. Problème avec

Pourquoi la différence?

Voici le code que je utilise dans l'application mobile:

SqlCeCommand cmd = new SqlCeCommand(Query); 
cmd.Connection = new SqlCeConnection("Data Source="+filePath+";Persist Security Info=False;"); 
DataTable tmpTable = new DataTable(); 
cmd.Connection.Open(); 
SqlCeDataReader tmpRdr = cmd.ExecuteReader(); 
if (tmpRdr.Read()) 
    tmpTable.Load(tmpRdr); 
tmpRdr.Close(); 
cmd.Connection.Close(); 
return tmpTable; 

MISE À JOUR: Par souci d'essayer je le code trouvé dans l'une des réponses trouvées here et il fonctionne comme attendu. Donc, mon code ressemble à ceci:

SqlCeConnection conn = new SqlCeConnection("Data Source=" + filePath + ";Persist Security Info=False;"); 
DataTable tmpTable = new DataTable(); 
SqlCeDataAdapter AD = new SqlCeDataAdapter(Query, conn); 
AD.Fill(tmpTable); 

Le problème semble être avec le SqlCeDataReader.

J'espère que cela aidera quelqu'un d'autre!

Répondre

1

Serait-ce la vérification que vous utilisez pour voir s'il y a des lignes dans votre jeu de résultats?

La méthode tmpRdr.Read() déplace le curseur sur la première ligne de l'ensemble de résultats s'il existe des lignes. Ensuite, lorsque vous faites tmpTable.Load, il se peut que la table de données soit chargée à partir de cet emplacement et ainsi de suite, ce qui entraîne le saut de la première (et de la seule?) Ligne.

Vous pouvez facilement vérifier cela en supprimant la ligne if (tmpRdr.Read()), car ce n'est pas nécessaire ici. La méthode Load n'échouera pas même si le jeu de résultats est vide et vous vous retrouvez avec une table de données vide dans les deux cas. La seule différence sera que vous obtiendrez les colonnes mises en place si vous supprimez l'instruction if.

+0

Cela serait parfaitement logique avec les résultats que je recevais ... Ou plutôt ne pas obtenir. Je vais essayer de voir ce qui se passe. – NitroxDM

+0

C'était tout. Merci! – NitroxDM

0

Je suis d'accord avec Rune - vous devez omettre

if (tmpRdr.Read()) 

Si vous voulez absolument vérifier si vous obtenez une ligne à la suite de l'exécution, vous feriez mieux d'utiliser ce code:

if (tmpRdr.HasRows) 
Questions connexes