2011-10-29 3 views
3

J'ai un problème lors de l'insertion de la valeur booléenne dans la base de données. J'ai structure simple:C# Insérer une valeur booléenne dans la base de données

struct 
{ 
    string name; 
    bool isStudent; 
} 

et je veux insérer dans la base de données comme ceci:

dbCommand.CommandText = "INSERT INTO People (name, isStudent) VALUES ('" + people1.name + "', " + people1.isStudent + ")"; 
dbCommand.ExecuteNonQuery(); 

mais je throws Exception:

erreur SQLite pas cette colonne: True

+0

Il vous dit que votre doesn de terrain n'existe pas dans votre base de données. Quelle est la structure de votre base de données? 'Describe database_table' – Luke

+0

Insérez' @ string', '@string =" Avertissement d'injection SQL standard. "' – Hogan

+0

Les valeurs booléennes sont stockées sous la forme 'bit's' 1' ou '0' vous avez besoin d'un'? '': 'Pour' Cela devrait résoudre votre problème. – Bastardo

Répondre

3

Essayez d'utiliser:

dbCommand.CommandText = "INSERT INTO People (name, isStudent) VALUES ('" + people1.name + "', '" + people1.isStudent + "')"; 

Notez que 'true' ou 'false' seront cités de cette façon.

Ou:

int val = isStudent ? 1 : 0; 
dbCommand.CommandText = "INSERT INTO People (name, isStudent) VALUES ('" + people1.name + "', " + val + ")"; 

1 seront utilisés pour les valeurs vraies et 0 pour les valeurs fausses.

1

SQLite n'a pas de type de colonne booléen et vous construisez vous-même l'instruction SQL. Si vous voulez faire cela, convertissez 1 et 0 d'avant en arrière.

Je pense aussi que le .net wrapper le ferait 4 u. Mais vous devrez utiliser des paramètres SQL et ne pas construire la chaîne vous-même pour lui donner une chance de le faire.

La construction de requêtes paramétrées (?) Permet également à SQL de mettre en cache les instructions compilées.

4

paramètres d'utilisation et vous ne serez pas à vous soucier de citations ou format des valeurs (en plus, il est une bonne pratique pour éviter l'injection SQL):

dbCommand.CommandText = "INSERT INTO People (name, isStudent) 
         VALUES (@name, @isStudent)"; 
dbCommand.Parameters.AddWithValue("@name", people1.name); 
dbCommand.Parameters.AddWithValue("@isStudent", people1.isStudent); 
dbCommand.ExecuteNonQuery(); 
Questions connexes