Requête paramétrée pour l’insertion de valeurs

J’essayais d’insérer des valeurs dans une firebase database Access à l’aide d’une requête paramétrée:

private void button1_Click(object sender, EventArgs e) { if (validationcontrol()) { MessageBox.Show(cmbjobcode.SelectedValue.ToSsortingng()); OleDbConnection oleDbConnection1 = new System.Data.OleDb.OleDbConnection(connSsortingng); oleDbConnection1.Open(); OleDbCommand oleDbCommand1 = new System.Data.OleDb.OleDbCommand("INSERT INTO quotationmastertable (quotationcode ,jobcode , jobpk , sillabordercharges , battabordercharges , driverpayment , rent , extra , total , discount , remark ,amount ) Values (?,?,?,?,?,?,?,?,?,?,?,?) ", oleDbConnection1); oleDbCommand1.Parameters.Add(txtquotationno.Text); oleDbCommand1.Parameters.Add(cmbjobcode.Text); oleDbCommand1.Parameters.Add(cmbjobcode.SelectedValue); oleDbCommand1.Parameters.Add(int.Parse(txtsilabordercharges.Text)); oleDbCommand1.Parameters.Add(int.Parse(txtbattacharges.Text)); oleDbCommand1.Parameters.Add(int.Parse(txtdriverpayment.Text)); oleDbCommand1.Parameters.Add(int.Parse(txtrent.Text)); oleDbCommand1.Parameters.Add(int.Parse(txtextra.Text)); oleDbCommand1.Parameters.Add(int.Parse(txttotal.Text)); oleDbCommand1.Parameters.Add(int.Parse(txtdiscount.Text)); oleDbCommand1.Parameters.Add(txtremark.Text); oleDbCommand1.Parameters.Add(int.Parse(txtamount.Text)); oleDbCommand1.CommandType = CommandType.Text; oleDbCommand1.ExecuteNonQuery(); oleDbConnection1.Close(); MessageBox.Show(txtquotationno.Text); } } 

mais je reçois une exception à la première ligne:

 oleDbCommand1.Parameters.Add(txtquotationno.Text); 

L’exception est

OleDbParameterCollection accepte uniquement les objects de type OleDbParameter non null, pas les objects Ssortingng.

Je suis nouveau en programmation; quelqu’un peut-il aider à signaler mes erreurs?

Un seul paramètre pour l’object Add attend un object OleDBParameter. Vous ne faites que transmettre des chaînes et des données.

Une solution simple consisterait à utiliser la méthode AddWithValue :

 oleDbCommand1.Parameters.AddWithValue("?", txtquotationno.Text); oleDbCommand1.Parameters.AddWithValue("?", cmbjobcode.Text); 

OleDB n’utilise pas vraiment les noms de parameters, mais l’index, ce qui vous permet de donner le nom du point d’interrogation pour chacun de vos parameters. Vous devez vous assurer que vos parameters sont dans le même ordre que votre instruction de requête.

Vous essayez d’append une chaîne à une collection de parameters. Essayez ceci (modification de OleDbType.VarChar, 50 en type réel de la colonne de données de votre firebase database.

 oleDbCommand1.Parameters.Add("@quot", OleDbType.VarChar, 50).Value = txtquotationno.Text; 

Voir le msdn pour un exemple: http://msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx