2017-05-20 2 views
0

Je suis en train de sélectionner des chaînes comme ça: "\\Data\\file - test.md"SQLite Sélectionnez le chemin de retour toujours nul

Je ne comprends pas pourquoi il revient sans cesse rien, mais je peux insérer dans le SQLite

public List<String> Select(String Path) 
{ 
    List<String> list = new List<String>(); 
    using (SQLiteCommand fmd = this.conn.CreateCommand()) 
    { 
     fmd.CommandText = "SELECT * FROM FILE WHERE Path = ?"; 
     fmd.Parameters.Add(new SQLiteParameter(Path)); 
     fmd.CommandType = CommandType.Text; 
     SQLiteDataReader r = fmd.ExecuteReader(); 
     if (r.HasRows) 
     { 
      while (r.Read()) 
      { 
       list.Add(r.GetString(0)); 
       list.Add(r.GetString(1)); 
       list.Add(r.GetString(2)); 
      } 
     } 
     else 
     { 
      return null; 
     } 
    } 
    return list; 
} 

Répondre

0

Je trouve que je dois utiliser @ pour les paramètres et non?

public List<String> Select(String Path) 
{ 
    List<String> list = new List<String>(); 
    using (SQLiteCommand fmd = this.conn.CreateCommand()) 
    { 
     fmd.CommandText = "SELECT * FROM FILE WHERE Path = @path"; 
     fmd.Parameters.Add(new SQLiteParameter("@path", Path)); 
     fmd.CommandType = CommandType.Text; 
     SQLiteDataReader r = fmd.ExecuteReader(); 
     if (r.HasRows) 
     { 
      while (r.Read()) 
      { 
       list.Add(r.GetString(0)); 
       list.Add(r.GetString(1)); 
       list.Add(r.GetString(2)); 
      } 
     } 
     else 
     { 
      return null; 
     } 
    } 
    return list; 
} 
+0

En théorie, '?' Et '@ xxx' doivent se comporter (sauf que l'ancien n'a pas de nom). –

+0

Oui, je pensais la même chose, mais dans ce cas, il semble qu'ils n'ont pas le même comportement –

0

Si elle est de retour nul, cela signifie que la fonction retourne de cette partie du Code

else 
{ 
    return null; 
} 

cela fait partie d'autre de if (r.HasRows). Cela signifie que la connexion a été établie et que la requête a été exécutée mais qu'aucun enregistrement n'a correspondu à votre paramètre passé. Une raison pourrait être que vous passez une chaîne avec des caractères de séquence d'échappement et la valeur du paramètre n'est pas ce que vous avez l'intention de passer. Veuillez déboguer et assurez-vous que la variable Path ne saute aucun caractère. Comme si votre chemin de recherche contient \ alors il devrait être passé comme \\ pour s'assurer qu'il correspond aux valeurs dans FILE qui contiennent ce caractère.

Hope it helps

+0

Il était à cause du paramètre mais grâce –