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.