2010-11-19 8 views
1

J'ai des problèmes pour insérer une valeur de zone de texte dans une base de données mysql - il n'y a pas de message d'erreur ni d'insertion. Qu'est-ce que je fais malinsérer une zone de texte de valeur dans la base de données mysql

private void RegisterCustomer() 
    { 
     string firstname = txtfirstname.ToString(); 

     OdbcConnection conn; 
     conn = new OdbcConnection(ConfigurationManager.ConnectionStrings["jConnString"].ConnectionString); 
     conn.Open(); 

     string sql = "insert into klant (firstname) values (@firstname)"; 
     OdbcCommand cmd = new OdbcCommand(sql, conn); 
     cmd.Parameters.Add("@firstname", OdbcType.VarChar).Value = firstname; 
     try 
     { 
      cmd.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      Check.Text += ex.ToString() + sql; 
     } 
     finally 
     { 
      conn.Close(); 
      conn.Dispose(); 
      Check.Text += "OK"; 
     } 
    } 
+0

Les 2 premières choses que je vérifierais: Lorsque vous l'exécutez dans le débogueur, lequel des blocs try/catch/finally fait-il? Lorsque vous regardez les journaux SQL, quelle instruction essaye-t-il d'exécuter? – Ken

+0

Est-ce que txtfirstname est un contrôle de zone de texte? – AndHeCodedIt

+0

@AndHeCodedIt oui c'est – Sjemmie

Répondre

0

Selon MSDN.
http://msdn.microsoft.com/en-us/library/system.data.odbc.odbccommand.parameters.aspx

Lorsque CommandType est défini sur Texte, le fournisseur de données .NET Framework pour ODBC ne prend pas en charge le passage des paramètres nommés à une instruction SQL ou une procédure stockée appelée par un OdbcCommand. Dans l'un de ces cas, utilisez le point d'interrogation (?) Espace réservé.

Ainsi, votre requête doit être:

string sql = "insert into klant (firstname) values (?)"

Si vous avez plusieurs paramètres, ils sont mis dans l'ordre que vous les ajouter.

En outre, je pense que la ligne

string firstname = txtfirstname.ToString();

devrait lire

string firstname = txtfirstname.Text();

Mais ce n'est pas la cause de votre problème immédiat.

+0

chaîne sql = "insérer dans klant (prénom) valeurs (?)" Fonctionne! mais chaîne firstname = txtfirstname.Text(); ou chaîne firstname = txtfirstname.Value.ToString(); me donne toujours System.Web.UI.HtmlControls.HtmlInputText inséré dans ma base de données – Sjemmie

+0

ce que worrks est la chaîne firstname = txtfirstname.Value – Sjemmie

0
"insert into klant values (firstname) values (@firstname)" 

Je pense que la bonne requête serait:

"insert into klant values (@firstname)"; 
-1

Plus précisément, il devrait être:

insert into klant (firstname) values (@firstname) 
0

Votre requête:

string sql = "insert into klant values (firstname) values (@firstname)"; 

Spécifie deux fois values. Il devrait être sous la forme:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] 
[INTO] tbl_name [(col_name,...)] 
{VALUES | VALUE} ({expr | DEFAULT},...),(...),... 
[ ON DUPLICATE KEY UPDATE 
    col_name=expr 
    [, col_name=expr] ... ] 

enlever Ainsi, le values supplémentaire et vous devriez être bon.

+0

petite erreur, corrigé, mais c'est pas ça – Sjemmie

0

Vous avez deux valeurs. Je ne l'ai jamais vu de cette façon. Vous INSCRIRE INTO table (columm_names ...) VALEURS (value1, 'value2', ...)

edit: peut-être que vous devriez essayer le texte directement et éliminer la boîte pour voir si elle entre. Au moins, vous saurez où regarder.

edit: Je ferais aussi écho à ma variable firstname pour voir ce qu'elle contient.

+0

petite erreur, corrigé, mais c'est pas ça – Sjemmie

Questions connexes