Fehler beim Senden der Daten an die Access-Datenbank

Nov 30 2020

Ich habe diese Ausnahme, wenn ich versuche, meinen Code an die Access-Datenbank zu senden:

System.Data.OleDb.OleDbException (0x80040E07): Nicht übereinstimmende Datentypen in einem Auswahlbedingungsausdruck

bei System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr)
bei System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMS dbParams, Object & executeResult)
bei System.Data.OleDb.OleDbCommand.ExecuteCommandText (Object & executeResult)
bei System.Data. OleDb.OleDbCommand.ExecuteCommand (CommandBehavior Verhalten, Object & executeResult)
bei System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (CommandBehavior Verhalten, String - Methode)
bei System.Data.OleDb.OleDbCommand.ExecuteNonQuery ()
bei KPIZ.Form2.btn_save_Click (Object sender , EventArgs e) in C: \ Benutzer \ booku \ source \ repos \ KPIZ \ KPIZ \ Form2.cs: Zeile 110

Mein 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();
        }
}

Antworten

3 ErikA Nov 30 2020 at 13:41

OLEDB-Parameter sind immer positionell. Dies bedeutet, dass die Reihenfolge der Parameter in Ihrer Abfrage mit der Reihenfolge der Parameter übereinstimmen muss, die in Ihrem Code hinzugefügt wurden.

Außerdem müssen Sie Ihren Datumsparameter als Datum und nicht als Zeichenfolge hinzufügen.

Passen Sie die Reihenfolge Ihrer Parameter an:

        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));

Wenn die Reihenfolge nicht übereinstimmt, werden viele Fehler angezeigt, da Sie jetzt versuchen, ein Textfeld in Ihre Datumsspalte oder Ganzzahlspalte einzufügen.