2016-12-09 15 views
2

接続は正常に機能します。この部分の問題に直面しています。次のようにRECORDテーブルの私の設計図である:私はレコードテーブルに挿入しようとしています"INSERT INTO文の構文エラー"を解決する方法

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"; 
      } 
     } 

    } 

それは私

を示しています

名データ型サイズここ

 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 

は私のコードです

"InSERT intoコマンドの構文エラー"。

何が間違っているかわかりません。

答えて

4

OleDbCommand doesnの中でそれをラップしてみたレコードキーワードと同じですね名前パラメータの概念を持っているので、クエリと同じ順序でパラメータを定義する必要があります。

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]に変更するか、データベース内のフィールド名を変更するか

関連する問題