简体   繁体   English

我不断收到此错误,条件表达式中的数据类型不匹配。 我不知道为什么

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

I am using Access for my database. 我正在为数据库使用Access。 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 //这是我的代码,应该向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);
            }

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. 示例代码中存在多个列值分配问题,在这种情况下,您要将string值传递给具有numberdate类型的列,这会导致数据类型不匹配异常。

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: 不应将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());

Edit: 编辑:

For DateTimePicker control, you can use Value property which has DateTime type: 对于DateTimePicker控件,可以使用具有DateTime类型的Value属性:

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

Reference: ADO.NET OLE DB Data Type Mappings 参考: ADO.NET OLE DB数据类型映射

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 “条件表达式中的数据类型不匹配。”错误 - “Data type mismatch in criteria expression.” Error System.Data.OleDB “条件表达式中的数据类型不匹配。” - System.Data.OleDB 'Data type mismatch in criteria expression.' “条件表达式中的数据类型不匹配。” ACCESS 2010和C# - “Data type mismatch in criteria expression.” ACCESS 2010 and C# SQL查询“条件表达式中的数据类型不匹配。” - SQL query “Data type mismatch in criteria expression.” 我收到此类型错误:条件表达式中的数据类型不匹配 - I got this type error:Data type mismatch in criteria expression System.Data.OleDb.OleDbException:“标准表达式中的数据类型不匹配。” C# 错误 - System.Data.OleDb.OleDbException: 'Data type mismatch in criteria expression.' C# error 'System.Data.OleDb.OleDbException:条件表达式中的数据类型不匹配。' 错误 - 'System.Data.OleDb.OleDbException: Data type mismatch in criteria expression.' error 获取数据库错误:条件表达式C#中的数据类型不匹配 - Getting DB error: data type mismatch in criteria expression c# System.Data.OleDb.OleDbException:'条件表达式中的数据类型不匹配。 在C#中 - System.Data.OleDb.OleDbException: 'Data type mismatch in criteria expression. in c# 在MS Access Insert.Into期间解决“条件表达式中的数据类型不匹配。” - Troubleshooting “Data type mismatch in criteria expression.” during MS Access Insert.Into
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM