2016-12-09 4 views
2

연결이 정상적으로 작동합니다.이 부분에서는 문제가 발생했습니다. 다음과 같이 RECORD 테이블의 내 디자인 뷰는 다음과 같습니다"INSERT INTO 문에서 구문 오류"를 해결하는 방법

이름 유형 크기

 RecordID    Long Integer        4 
    BatchID     Long Integer        4 

    ProcessID    Long Integer        4 
    EmployeeID    Long Integer        4 
    Start     Date With Time       8 

    End      Date With Time       8 
    Status     Yes/No         1 
    Hour     Long Integer 
여기

내 코드 :

protected void btnSave_Click(object sender, EventArgs e) 
    { 

     DateTime a = new DateTime(cldStart.SelectedDate.Year,cldStart.SelectedDate.Month,cldStart.SelectedDate.Day,Convert.ToInt32(ddlStartHour.SelectedValue),Convert.ToInt32(ddlStartMinute.SelectedValue),00); 
     DateTime b = new DateTime(cldEnd.SelectedDate.Year, cldEnd.SelectedDate.Month, cldEnd.SelectedDate.Day, Convert.ToInt32(ddlEndHour.SelectedValue), Convert.ToInt32(ddlEndMinute.SelectedValue), 00); 
     TimeSpan c = b-a; 

     //insert into record table 
     using (OleDbConnection con = new OleDbConnection(conString)) 
     { 
      try 
      { 
       OleDbCommand cmd = new OleDbCommand(); 
       cmd.CommandType = CommandType.Text; 
       cmd.CommandText = "INSERT INTO RECORD (BatchID,ProcessID,EmployeeID,Start,End,Status,Hour) VALUES (@batchid,@processid,@employeeid,@start,@end,@status,@hours)"; 
       cmd.Parameters.AddWithValue("@batchid", Convert.ToInt32(ddlBatchNo.SelectedValue)); 
       cmd.Parameters.AddWithValue("@processid", Convert.ToInt32(ddlSubCategory.SelectedValue)); 
       cmd.Parameters.AddWithValue("@employeeid", Convert.ToInt32(ddlEmployeeId.SelectedValue)); 
        cmd.Parameters.AddWithValue("@start",a.ToString()); 
        cmd.Parameters.AddWithValue("@end", b.ToString()); 
        cmd.Parameters.AddWithValue("@hours", c.ToString()); 
        cmd.Parameters.AddWithValue("@status",chboxStatus.Checked); 
       cmd.Connection = con; 
       con.Open(); 
       cmd.ExecuteNonQuery(); 
      } 
      catch (Exception ex) 
      { 
       txtRemark.Text = "wrong"; 
      } 
     } 

    } 

내가 기록 테이블에 삽입하려고하지만 나에게

를 보여줍니다

"InSERT 명령에 구문 오류가 있습니다."

무엇이 잘못되었는지를 모릅니다.

답변

4

OleDbCommand 아무튼에서 포장 시도 레코드 키워드와 동일있어 이름 매개 변수 개념이 있으므로 쿼리와 동일한 순서로 매개 변수를 정의해야합니다.

cmd.Parameters.AddWithValue("@hours", c.ToString()); 
    cmd.Parameters.AddWithValue("@status",chboxStatus.Checked); 

그래서 당신은

cmd.Parameters.AddWithValue("@status",chboxStatus.Checked); 
    cmd.Parameters.AddWithValue("@hours", c.ToString()); 

가 있어야하지만 당신의 쿼리의 상태는 시간 전입니다. 다른 사람들이 언급 한 것처럼 예약어도 수정하십시오.

0

당신은 테이블 이름

괄호

보호 무효 btnSave_Click (개체 보낸 사람, EventArgs입니다 전자) {

DateTime a = new DateTime(cldStart.SelectedDate.Year,cldStart.SelectedDate.Month,cldStart.SelectedDate.Day,Convert.ToInt32(ddlStartHour.SelectedValue),Convert.ToInt32(ddlStartMinute.SelectedValue),00); 
    DateTime b = new DateTime(cldEnd.SelectedDate.Year, cldEnd.SelectedDate.Month, cldEnd.SelectedDate.Day, Convert.ToInt32(ddlEndHour.SelectedValue), Convert.ToInt32(ddlEndMinute.SelectedValue), 00); 
    TimeSpan c = b-a; 

    //insert into record table 
    using (OleDbConnection con = new OleDbConnection(conString)) 
    { 
     try 
     { 
      OleDbCommand cmd = new OleDbCommand(); 
      cmd.CommandType = CommandType.Text; 
      cmd.CommandText = "INSERT INTO [RECORD] (BatchID,ProcessID,EmployeeID,Start,End,Status,Hour) VALUES (@batchid,@processid,@employeeid,@start,@end,@status,@hours)"; 
      cmd.Parameters.AddWithValue("@batchid", Convert.ToInt32(ddlBatchNo.SelectedValue)); 
      cmd.Parameters.AddWithValue("@processid", Convert.ToInt32(ddlSubCategory.SelectedValue)); 
      cmd.Parameters.AddWithValue("@employeeid", Convert.ToInt32(ddlEmployeeId.SelectedValue)); 
       cmd.Parameters.AddWithValue("@start",a.ToString()); 
       cmd.Parameters.AddWithValue("@end", b.ToString()); 
       cmd.Parameters.AddWithValue("@hours", c.ToString()); 
       cmd.Parameters.AddWithValue("@status",chboxStatus.Checked); 
      cmd.Connection = con; 
      con.Open(); 
      cmd.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      txtRemark.Text = "wrong"; 
     } 
    } 

} 
3

귀하의 열 이름이 키워드입니다이 같은 end,hour 그래서 당신은

cmd.CommandText = "INSERT INTO RECORD (BatchID,ProcessID,EmployeeID,Start,[End],Status,[Hour]) VALUES (@batchid,@processid,@employeeid,@start,@end,@status,@hours)"; 
+0

정말 고마워요! 나는 열 이름을 키워드로 사용하는 어리석은 실수를했습니다! 이제 완전히 잘 동작합니다. – user3431431

2

Start,End,Status,Hour 필드 이름이 키워드입니다 중괄호로 묶어야합니다. 값을 [Start],[End],[Status],[Hour]으로 변경하거나 데이터베이스에서 필드 이름을 변경하십시오.