簡體   English   中英

我不斷收到此錯誤,條件表達式中的數據類型不匹配。 我不知道為什么

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

我正在為數據庫使用Access。 表乘客有以下我似乎找不到問題所在。 有人可以幫我嗎

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)

//這些是我的變量

        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;

//這是我的代碼,應該向Table Passengers添加新記錄,但我不斷收到錯誤

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

示例代碼中存在多個列值分配問題,在這種情況下,您要將string值傳遞給具有numberdate類型的列,這會導致數據類型不匹配異常。

不應將AddWithValue用於所有類型的值,而應使用OleDbCommand.Parameters.Add()來指定適當的數據類型和值,例如以下示例:

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

編輯:

對於DateTimePicker控件,可以使用具有DateTime類型的Value屬性:

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

參考: ADO.NET OLE DB數據類型映射

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM