2016-12-09 71 views
2

的連接工作fine.I我只是面臨的問題在這個部分。我的設計記錄表的觀點如下:如何解決「在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 INTO命令語法錯誤」。

不知道什麼是錯的。

回答

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]或者要麼改變字段名在數據庫

相關問題