2013-04-18 4 views
0

stringbuilder를 사용하여 프로세스를 단순화하려고 시도했지만 오류가 표시되고 stringbuilder 또는 코드 구문과 관련된 문제인지 이해할 수 없습니다.쿼리를 구문 분석하는 동안 오류가 발생했습니다. [Token line number = 1 ...]

코드 :

 if (dataGridView4.RowCount == 0) 
     { 
      MessageBox.Show("Attendance form is empty"); 
     } 
     else 
     { 
      //string att; 
      int a = dataGridView4.RowCount; 
      string[] s = new string[a]; 
      for (int i = 0; i < a; i++) 
      { 
       if (dataGridView4.Rows[i].Cells[1].Selected) 
       { 
        s[i] = "Present"; 
       } 
       else 
       { 
        s[i] = "Absent"; 
       } 
      } 
      string[] s1 = new string[a]; 
      for (int i = 0; i < a; i++) 
      { 
       s1[i] = dataGridView4.Rows[i].Cells[0].Value.ToString(); 
      } 
      string date = dateTimePicker1.Value.ToString("dd-MM-yyyy"); 
      StringBuilder command = new StringBuilder(); 
      for (int i = 0; i < a; i++) 
      { 
       command.Append("INSERT into Attendance (att_date, emp_code, is_present) values ('" + date + "','" + s1[i] + "','" + s[i] + "')"); 
      } 
      SqlCeConnection conn = new SqlCeConnection(@"Data Source=C:\Users\admin\documents\visual studio 2010\Projects\WindowsFormsApplication1\WindowsFormsApplication1\hotel.sdf"); 
      conn.Open(); 
      SqlCeCommand cmd = new SqlCeCommand(command.ToString(),conn); 
      cmd.ExecuteNonQuery(); 
      MessageBox.Show("Attendance Added"); 

나를 위의 코드는 간단하게 알려 주시기 바랍니다 수 있도록 어떤 제안이 또한 경우,이 오류를 해결하는 데 도움이 바랍니다.

미리 감사드립니다.

+0

을 다음 당신은 할 수 있습니다 각 격자 행에 대해

, 나는 내가 이것 때문에 오류를 얻고, SQL 서버 컴팩트를 사용하고? stringbuilder 대신 for 루프를 사용해야합니까? –

답변

0

당신은 당신이 다음 삽입 많은 레코드가있는 경우

using (SqlCeConnection con = new SqlCeConnection(strConn)) 
{ 
    con.Open(); 
    using (SqlCeCommand cmd = new SqlCeCommand("insert into Attendance (att_date, emp_code, is_present) values (@att_date, @emp_code, @is_present)", con)) 
    { 
     cmd.Parameters.AddWithValue("@att_date", dateTimePicker1.Value); 
     cmd.Parameters.AddWithValue("@emp_code", emp_codeVal); //s1[i] 
     cmd.Parameters.AddWithValue("@is_present", is_presentVal); //s[i] 
     cmd.CommandType = System.Data.CommandType.Text; 
     cmd.ExecuteNonQuery(); 
    } 
} 

.. SQL 주입 공격을 방지하기 위해 매개 변수를 사용하고 또한 당신이 날짜 시간 매개 변수에 무슨 짓을했는지처럼 문자열로 변환 할 필요가 없습니다 필요 SqlCeResultSet을 사용해보십시오. 해당 링크에있는 MSDN 예제 코드를 확인할 수 있습니다. 난 그냥 눈치

// this is only a sample you need to write for your table 
SqlCeUpdatableRecord rec = rs.CreateRecord(); 

rec.SetInt32(0, 34); 
rec.SetDecimal(1, (decimal)44.66); 
rec.SetString(2, "Sample text"); 

rs.Insert(rec); 
+0

도와 주셔서 감사합니다. 데이터베이스에 여러 행을 삽입해야합니다. 코드를 루프 할 필요가 있거나 코드에서 stringbuilder를 사용할 수있는 방법이 있습니까? –

+0

코드에서 : att_date, emp_code, is_present, 내 코드를 기반으로 @date, s1 [i], s [i] 및 dateVal, s1 [i] Val, s [i] Val을 사용해야합니까? –

+0

그것은'dateTimePicker1.Value, s1 [i], s [i]'이어야합니다. – Damith

관련 문제