2016-12-09 9 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] или измените название поля в базе данных