2010-02-23 1 views
5

(int) faultsGroup est 0 ou 1, mais je reçois toujours cette erreur: la colonne 'FaultGroup' ne peut pas être nulleC# MySqlParameter problème

Est-ce que quelqu'un me dire pourquoi? La syntaxe semble correcte.

MySqlCommand cmdAdd = new MySqlCommand("INSERT INTO Faults (" + 
     " FaultGroup, Text, Date, IP" + 
     ") VALUES (" + 
     " @FaultGroup, @Text, @Date, @IP" + 
     ")", conn); 

MySqlParameter paramFaultGroup = new MySqlParameter("@FaultGroup", MySqlDbType.Int32); 
FaultsGroup faultsGroup = (FaultsGroup) Enum.Parse(typeof (FaultsGroup), myFault.FaultGroup); 
paramFaultGroup.Value = (int) faultsGroup; 
cmdAdd.Parameters.Add(paramFaultGroup); 

cmdAdd.ExecuteNonQuery(); 
+1

Vous devez accepter les réponses à vos questions en cochant la case en regard d'une réponse. – SLaks

Répondre

4

Je ne l'ai pas utilisé MySql pendant environ 6 mois (heureusement écoulèrent hors de Sql Server) mais, essayez de changer vos symboles @ s pour? », Comme si ma mémoire est bonne, c'est la convention correcte avec MySql, donc :

MySqlCommand cmdAdd = new MySqlCommand(
     "INSERT INTO Faults (FaultGroup, Text, Date, IP)" 
     + " VALUES (?FaultGroup, ?Text, ?Date, ?IP)", 
     conn); 

MySqlParameter paramFaultGroup = new MySqlParameter("?FaultGroup", MySqlDbType.Int32); 
FaultsGroup faultsGroup = (FaultsGroup) Enum.Parse(typeof (FaultsGroup), myFault.FaultGroup); 
paramFaultGroup.Value = (int) faultsGroup; 
cmdAdd.Parameters.Add(paramFaultGroup); 

cmdAdd.ExecuteNonQuery(); 
+1

En fait, le symbole '@' fonctionne correctement, du moins pour le connecteur MySQL ADO.Net (que je suppose que l'OP utilise). –

+1

problème était dans la version du connecteur ado.net. J'utilisais 5.1.7 maintenant j'utilise v6. Thx tout pour l'aide – senzacionale

+0

comment puis-je connaître la version? – kbvishnu