[英]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
值传递给具有number
或date
类型的列,这会导致数据类型不匹配异常。
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.