简体   繁体   中英

I keep getting this error , Data type mismatch in criteria expression. I cannot figure out why

I am using Access for my database. The Table Passengers has the following I cannot seem to find where the problem is. Can someone please help me out

Passenger Number(Auto Number)
FirstName (short text)
LastName (short text)
Initials (short text)
ID_number (short text)
Gender (short text)
Date_of_Birth (Date/Time)
Cell_Number (short text)
Street_Number (number)
Street_Name (short text)
Postal_Code  (number)

//These are my variables

        string name = txtFirstName.Text;
        string surname = textBox3.Text;
        string initials = textBox2.Text;
        string id = textBox6.Text;
        string gender = comboBox1.SelectedItem.ToString();
        string dest = cmbDestination.SelectedValue.ToString();
        string num =textBox9.Text;
        string snum = textBox8.Text;
        string sname = textBox7.Text;
        string pcode = comboBox2.SelectedItem.ToString();
        string date = dateTimePicker1.Text;

//Here is my code, It is supposed to add a new record to the Table Passengers, but I keep getting the error

        try
            {
               using (OleDbConnection connect = new 
               OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data 
               Source=" + Application.StartupPath + "\\Database3.accdb"))
               {

                   OleDbCommand cmd = new OleDbCommand("INSERT INTO 
                   Passengers ([FirstName],[LastName],[Initials] , 
                   [ID_number],[Gender],[Date_Of_Birth],[Cell_Number], 
                   [Street_Number], [Street_Name],[Postal_Code]) VALUES 
                   (?,?,?,?,?,?,?,?,?,?)", connect);
                    cmd.Connection = connect;

                    cmd.Parameters.AddWithValue("@FirstName", name);
                    cmd.Parameters.AddWithValue("@LastName", surname);
                    cmd.Parameters.AddWithValue("@Initials", initials);
                    cmd.Parameters.AddWithValue("@ID_number", id);
                    cmd.Parameters.AddWithValue("@Gender", gender);
                    cmd.Parameters.AddWithValue("@Date_Of_Birth", date);
                    cmd.Parameters.AddWithValue("@Cell_Number", num);
                    cmd.Parameters.AddWithValue("@Street_Number", snum);
                    cmd.Parameters.AddWithValue("@Street_Name", sname);
                    cmd.Parameters.AddWithValue("@Postal_Code", pcode);


                    connect.Open();
                    cmd.ExecuteNonQuery();

                    OleDbDataAdapter adapt = new OleDbDataAdapter("SELECT * 
                    FROM Passengers", connect);
                    MessageBox.Show("Seat successfully booked for 
                    passenger!");
                    Console.Beep(659, 125); Console.Beep(659, 125); 
                    Console.Beep(659, 125);

                    this.Close();
                    connect.Close();


                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

There are multiple column value assignment issues in your example code, in this case you're passing string values to columns which has either number or date type which causing data type mismatch exception.

Instead of using AddWithValue for all kind of values, you should use OleDbCommand.Parameters.Add() to specify proper data types and values like this example:

// note: use DateTime.ParseExact for specific date formatting
cmd.Parameters.Add("@Date_Of_Birth", OleDbType.Date).Value = DateTime.Parse(dateTimePicker1.Text);

cmd.Parameters.Add("@Street_Number", OleDbType.Integer).Value = int.Parse(textBox8.Text);
cmd.Parameters.Add("@Postal_Code", OleDbType.Integer).Value = int.Parse(comboBox2.SelectedItem.ToString());

Edit:

For DateTimePicker control, you can use Value property which has DateTime type:

cmd.Parameters.Add("@Date_Of_Birth", OleDbType.Date).Value = dateTimePicker1.Value;

Reference: ADO.NET OLE DB Data Type Mappings

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM