Terjadi kesalahan saat mengirim data ke Access Database

Nov 30 2020

Saya memiliki pengecualian ini saat mencoba mengirim kode saya ke Access Database:

System.Data.OleDb.OleDbException (0x80040E07): tipe data tidak cocok dalam ekspresi kondisi pemilihan

di System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr)
di System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMS dbParams, Object & executeResult)
di System.Data.OleDb.OleDbCommand.ExecuteCommandText (Object & executeResult)
di System.Data. OleDb.OleDbCommand.ExecuteCommand (CommandBehavior perilaku, Object & executeResult)
di System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (perilaku CommandBehavior, metode String)
di System.Data.OleDb.OleDbCommand.ExecuteNonQuery ()
di KPIZ.Form2.btn_save_Click (pengirim Object , EventArgs e) di C: \ Users \ booku \ source \ repos \ KPIZ \ KPIZ \ Form2.cs: baris 110

Kode saya:

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

Jawaban

3 ErikA Nov 30 2020 at 13:41

Parameter OLEDB selalu posisional. Ini berarti urutan parameter dalam kueri Anda harus sesuai dengan urutan parameter saat ditambahkan di kode Anda.

Selain itu, Anda perlu menambahkan parameter tanggal Anda menjadi tanggal, bukan string.

Sesuaikan urutan parameter Anda agar cocok:

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

Jika urutannya tidak sesuai, Anda mendapatkan banyak kesalahan, karena sekarang Anda mencoba memasukkan bidang teks ke kolom tanggal atau kolom bilangan bulat Anda.