Access 데이터베이스로 데이터를 보내는 동안 오류가 발생했습니다.
Access 데이터베이스에 코드를 보내려고 할 때이 예외가 발생합니다.
System.Data.OleDb.OleDbException (0x80040E07) : 선택 조건 식에서 데이터 형식이 일치하지 않습니다.
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult의 시간)에서
System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult에서 (tagDBPARAMS dbParams 개체 및 executeResult)
System.Data.OleDb.OleDbCommand.ExecuteCommandText에서 (개체 및 executeResult)
System.Data에서. OleDb.OleDbCommand.ExecuteCommand (CommandBehavior behavior, Object & executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal (CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteNonQuery ()
at KPIZ.Form2.btn_save_Click (Object sender) , EventArgs e) C : \ Users \ booku \ source \ repos \ KPIZ \ KPIZ \ Form2.cs : line 110
내 코드 :
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();
}
}
답변
OLEDB 매개 변수는 항상 위치 적입니다. 이는 쿼리의 매개 변수 순서가 코드에 추가 될 때 매개 변수의 순서와 일치해야 함을 의미합니다.
또한 날짜 매개 변수를 문자열이 아닌 날짜로 추가해야합니다.
매개 변수 순서를 다음과 일치하도록 조정하십시오.
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));
순서가 일치하지 않으면 날짜 열 또는 정수 열에 텍스트 필드를 삽입하려고하므로 많은 오류가 발생합니다.