Fehler beim Senden der Daten an die Access-Datenbank
Ich habe diese Ausnahme, wenn ich versuche, meinen Code an die Access-Datenbank zu senden:
System.Data.OleDb.OleDbException (0x80040E07): Nicht übereinstimmende Datentypen in einem Auswahlbedingungsausdruck
bei System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr)
bei System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult (tagDBPARAMS dbParams, Object & executeResult)
bei System.Data.OleDb.OleDbCommand.ExecuteCommandText (Object & executeResult)
bei System.Data. OleDb.OleDbCommand.ExecuteCommand (CommandBehavior Verhalten, Object & executeResult)
bei System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (CommandBehavior Verhalten, String - Methode)
bei System.Data.OleDb.OleDbCommand.ExecuteNonQuery ()
bei KPIZ.Form2.btn_save_Click (Object sender , EventArgs e) in C: \ Benutzer \ booku \ source \ repos \ KPIZ \ KPIZ \ Form2.cs: Zeile 110
Mein Code:
private void btn_save_Click(object sender, EventArgs e)
{
try
{
byte[] imageBt = null;
FileStream fstream = new FileStream(this.textBox2.Text, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fstream);
imageBt = br.ReadBytes((int)fstream.Length);
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
command.CommandText = @"INSERT INTO [SportInfo]([ID],[FirstName],[LastName],[DOB],[Sport],[DIW],[Image])" + "VALUES(@id, @Fn, @Ln, @Date, @Sports, @days ,@IMG)";
command.Parameters.Add(new OleDbParameter("@Fn", Convert.ToString(txt_fname.Text)));
command.Parameters.Add(new OleDbParameter("@Ln", Convert.ToString(txt_lname.Text)));
command.Parameters.Add(new OleDbParameter("@Date", Convert.ToString(mtxt_dob.Text)));
command.Parameters.Add(new OleDbParameter("@Sports", Convert.ToString(txt_sport.Text)));
command.Parameters.Add(new OleDbParameter("@days", Convert.ToInt32(nmc_diw.Text)));
command.Parameters.Add(new OleDbParameter("@id", Convert.ToInt32(txt_id.Text)));
command.Parameters.Add(new OleDbParameter("@IMG", imageBt));
command.ExecuteNonQuery();
MessageBox.Show("Data Saved");
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show("Unlucky " + ex);
connection.Close();
}
try
{
connection.Open();
OleDbCommand command = new OleDbCommand();
command.Connection = connection;
string query = "select ID,LastName,FirstName,DOB,Sport,DIW, from SportInfo ";
command.CommandText = query;
OleDbDataAdapter da = new OleDbDataAdapter(command);
dt = new DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;
connection.Close();
}
}
Antworten
OLEDB-Parameter sind immer positionell. Dies bedeutet, dass die Reihenfolge der Parameter in Ihrer Abfrage mit der Reihenfolge der Parameter übereinstimmen muss, die in Ihrem Code hinzugefügt wurden.
Außerdem müssen Sie Ihren Datumsparameter als Datum und nicht als Zeichenfolge hinzufügen.
Passen Sie die Reihenfolge Ihrer Parameter an:
command.Parameters.Add(new OleDbParameter("@id", Convert.ToInt32(txt_id.Text)));
command.Parameters.Add(new OleDbParameter("@Fn", Convert.ToString(txt_fname.Text)));
command.Parameters.Add(new OleDbParameter("@Ln", Convert.ToString(txt_lname.Text)));
command.Parameters.Add(new OleDbParameter("@Date", DateTime.Parse(mtxt_dob.Text)));
command.Parameters.Add(new OleDbParameter("@Sports", Convert.ToString(txt_sport.Text)));
command.Parameters.Add(new OleDbParameter("@days", Convert.ToInt32(nmc_diw.Text)));
command.Parameters.Add(new OleDbParameter("@IMG", imageBt));
Wenn die Reihenfolge nicht übereinstimmt, werden viele Fehler angezeigt, da Sie jetzt versuchen, ein Textfeld in Ihre Datumsspalte oder Ganzzahlspalte einzufügen.