[英]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
值傳遞給具有number
或date
類型的列,這會導致數據類型不匹配異常。
不應將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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.