Erreur lors de l'envoi des données à la base de données Access

Nov 30 2020

J'ai cette exception lorsque j'essaye d'envoyer mon code à la base de données Access:

System.Data.OleDb.OleDbException (0x80040E07): incompatibilité de type de données dans une expression de condition de sélection

à System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult h)
à System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMS dbParams, objet & ExecuteResult)
à System.Data.OleDb.OleDbCommand.ExecuteCommandText (Object & ExecuteResult)
à System.Data. OleDb.OleDbCommand.ExecuteCommand (Comportement CommandBehavior, Object & executeResult)
à System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (Comportement de CommandBehavior, méthode String)
à System.Data.OleDb.OleDbCommand.ExecuteNbtnbtnbtn
(Object) , EventArgs e) dans C: \ Users \ booku \ source \ repos \ KPIZ \ KPIZ \ Form2.cs: ligne 110

Mon code:

private void btn_save_Click(object sender, EventArgs e)
{
        try
        {
            byte[] imageBt = null;
            FileStream fstream = new FileStream(this.textBox2.Text, FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fstream);
            imageBt = br.ReadBytes((int)fstream.Length);

            connection.Open();

            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            command.CommandText = @"INSERT INTO [SportInfo]([ID],[FirstName],[LastName],[DOB],[Sport],[DIW],[Image])" + "VALUES(@id, @Fn, @Ln, @Date, @Sports, @days ,@IMG)";
            
            command.Parameters.Add(new OleDbParameter("@Fn", Convert.ToString(txt_fname.Text)));
            command.Parameters.Add(new OleDbParameter("@Ln", Convert.ToString(txt_lname.Text)));
            command.Parameters.Add(new OleDbParameter("@Date", Convert.ToString(mtxt_dob.Text)));
            command.Parameters.Add(new OleDbParameter("@Sports", Convert.ToString(txt_sport.Text)));
            command.Parameters.Add(new OleDbParameter("@days", Convert.ToInt32(nmc_diw.Text)));
            command.Parameters.Add(new OleDbParameter("@id", Convert.ToInt32(txt_id.Text)));
            command.Parameters.Add(new OleDbParameter("@IMG", imageBt));

            command.ExecuteNonQuery();

            MessageBox.Show("Data Saved");
            connection.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show("Unlucky  " + ex);
            connection.Close();
        }

        try
        {
            connection.Open();
            OleDbCommand command = new OleDbCommand();
            command.Connection = connection;
            string query = "select ID,LastName,FirstName,DOB,Sport,DIW, from SportInfo ";
            command.CommandText = query;

            OleDbDataAdapter da = new OleDbDataAdapter(command);
            dt = new DataTable();
            da.Fill(dt);
            dataGridView1.DataSource = dt;

            connection.Close();
        }
}

Réponses

3 ErikA Nov 30 2020 at 13:41

Les paramètres OLEDB sont toujours positionnels. Cela signifie que l'ordre des paramètres dans votre requête doit correspondre à l'ordre des paramètres au fur et à mesure qu'ils sont ajoutés dans votre code.

En outre, vous devez ajouter votre paramètre de date pour être une date, pas une chaîne.

Ajustez l'ordre de vos paramètres pour qu'il corresponde:

        command.Parameters.Add(new OleDbParameter("@id", Convert.ToInt32(txt_id.Text)));
        command.Parameters.Add(new OleDbParameter("@Fn", Convert.ToString(txt_fname.Text)));
        command.Parameters.Add(new OleDbParameter("@Ln", Convert.ToString(txt_lname.Text)));
        command.Parameters.Add(new OleDbParameter("@Date", DateTime.Parse(mtxt_dob.Text)));
        command.Parameters.Add(new OleDbParameter("@Sports", Convert.ToString(txt_sport.Text)));
        command.Parameters.Add(new OleDbParameter("@days", Convert.ToInt32(nmc_diw.Text)));
        command.Parameters.Add(new OleDbParameter("@IMG", imageBt));

Si l'ordre ne correspond pas, vous obtenez de nombreuses erreurs, car vous essayez maintenant d'insérer un champ de texte dans votre colonne de date ou votre colonne d'entiers.