2016-11-28 3 views
0

이것이 왜 DGV가 5 행인 경우에만 DataGridView의 첫 번째 값을 5 번만 반환하는지 5 번 생각하십시오. sql이 성공적으로 삽입되어야합니다. 내 루프에 뭔가 잘못 들어 있어야합니다. 이상적으로는 datagridview에서 5 행의 값을 반환해야하며, 첫 번째뿐만 아니라 전체 datagridview를 효과적으로 데이터베이스로 전송해야합니다.C# 데이터베이스에 DataGridView 데이터를 삽입해도 첫 번째 값만 n 번만 반환됩니까?

using (OleDbConnection conn = new OleDbConnection(Con)) 
using (OleDbCommand cmd = new OleDbCommand()) 
{ 
    cmd.Connection = conn; 
    conn.Open(); 
    for (int i = 0; i <= DGVExcel.Rows.Count - 1; i++) 
    { 
     cmd.CommandText = 
      "Insert INTO ACTB (FirstName, LastName, GrossIncome, LessTNT, TaxableIncomeCE, TaxableIncomePE, GrossTaxableIncome, LessTE, LessPPH, NetTax, TaxDue, HeldTaxCE, HeldTaxPE, TotalTax) " + 
      "VALUES(@First, @Last, @Gross, @LessTNT, @TCI, @ADDTI, @GTI, @LessTE, @LessPPH, @LessNTI, @TD, @TWCE, @TWPE, @TATW)"; 
     //cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(txtID.Text)); 
     cmd.Parameters.AddWithValue("@First", DGVExcel.Rows[i].Cells[0].Value); 
     cmd.Parameters.AddWithValue("@Last", DGVExcel.Rows[i].Cells[1].Value); 
     cmd.Parameters.AddWithValue("@Gross", Convert.ToDouble(DGVExcel.Rows[i].Cells[2].Value)); 
     cmd.Parameters.AddWithValue("@LessTNT", 
      Convert.ToDouble(DGVExcel.Rows[i].Cells[3].Value)); 
     cmd.Parameters.AddWithValue("@TCI", Convert.ToDouble(DGVExcel.Rows[i].Cells[4].Value)); 
     cmd.Parameters.AddWithValue("@ADDTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[5].Value)); 
     cmd.Parameters.AddWithValue("@GTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[6].Value)); 
     cmd.Parameters.AddWithValue("@LessTE", Convert.ToDouble(DGVExcel.Rows[i].Cells[7].Value)); 
     cmd.Parameters.AddWithValue("@LessPPH", 
      Convert.ToDouble(DGVExcel.Rows[i].Cells[8].Value)); 
     cmd.Parameters.AddWithValue("@LessNTI", 
      Convert.ToDouble(DGVExcel.Rows[i].Cells[9].Value)); 
     cmd.Parameters.AddWithValue("@TD", Convert.ToDouble(DGVExcel.Rows[i].Cells[10].Value)); 
     cmd.Parameters.AddWithValue("@TWCE", Convert.ToDouble(DGVExcel.Rows[i].Cells[11].Value)); 
     cmd.Parameters.AddWithValue("@TWPE", Convert.ToDouble(DGVExcel.Rows[i].Cells[12].Value)); 
     cmd.Parameters.AddWithValue("@TATW", Convert.ToDouble(DGVExcel.Rows[i].Cells[13].Value)); 
     cmd.ExecuteNonQuery(); 
    } 
} 
+0

디버그를 사용하면 처음 모습이 좋아 보이는지 확인하십시오. – mybirthname

+0

오른쪽. 벌써 디버깅 해 봤는데 잘 돌아 간다. DataGridView의 첫 번째 값만 n 번 반환한다는 사실을 제외하고는 N은보기의 항목 수입니다. 내 생각 엔 아마도 첫 번째 패스 이후 어딘가에서 업데이트되지 않는 매개 변수 일 것입니다. – Aroueterra

답변

0

루프 중에 새로운 삽입 호출마다 OleDdCommand를 초기화해야합니다. 시도해보십시오.

using (OleDbConnection conn = new OleDbConnection(Con)) 
{ 
    conn.Open(); 
    for (int i = 0; i <= DGVExcel.Rows.Count - 1; i++) 
    { 
     OleDbCommand cmd = new OleDbCommand(); 
     cmd.Connection = conn; 

     cmd.CommandText = 
      "Insert INTO ACTB (FirstName, LastName, GrossIncome, LessTNT, TaxableIncomeCE, TaxableIncomePE, GrossTaxableIncome, LessTE, LessPPH, NetTax, TaxDue, HeldTaxCE, HeldTaxPE, TotalTax) " + 
      "VALUES(@First, @Last, @Gross, @LessTNT, @TCI, @ADDTI, @GTI, @LessTE, @LessPPH, @LessNTI, @TD, @TWCE, @TWPE, @TATW)"; 
     //cmd.Parameters.AddWithValue("@ID", Convert.ToInt32(txtID.Text)); 
     cmd.Parameters.AddWithValue("@First", DGVExcel.Rows[i].Cells[0].Value); 
     cmd.Parameters.AddWithValue("@Last", DGVExcel.Rows[i].Cells[1].Value); 
     cmd.Parameters.AddWithValue("@Gross", Convert.ToDouble(DGVExcel.Rows[i].Cells[2].Value)); 
     cmd.Parameters.AddWithValue("@LessTNT", 
      Convert.ToDouble(DGVExcel.Rows[i].Cells[3].Value)); 
     cmd.Parameters.AddWithValue("@TCI", Convert.ToDouble(DGVExcel.Rows[i].Cells[4].Value)); 
     cmd.Parameters.AddWithValue("@ADDTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[5].Value)); 
     cmd.Parameters.AddWithValue("@GTI", Convert.ToDouble(DGVExcel.Rows[i].Cells[6].Value)); 
     cmd.Parameters.AddWithValue("@LessTE", Convert.ToDouble(DGVExcel.Rows[i].Cells[7].Value)); 
     cmd.Parameters.AddWithValue("@LessPPH", 
      Convert.ToDouble(DGVExcel.Rows[i].Cells[8].Value)); 
     cmd.Parameters.AddWithValue("@LessNTI", 
      Convert.ToDouble(DGVExcel.Rows[i].Cells[9].Value)); 
     cmd.Parameters.AddWithValue("@TD", Convert.ToDouble(DGVExcel.Rows[i].Cells[10].Value)); 
     cmd.Parameters.AddWithValue("@TWCE", Convert.ToDouble(DGVExcel.Rows[i].Cells[11].Value)); 
     cmd.Parameters.AddWithValue("@TWPE", Convert.ToDouble(DGVExcel.Rows[i].Cells[12].Value)); 
     cmd.Parameters.AddWithValue("@TATW", Convert.ToDouble(DGVExcel.Rows[i].Cells[13].Value)); 
     cmd.ExecuteNonQuery(); 
    } 
} 
+0

또는 매개 변수를 한 번 추가하면 (루프 전에) 루프 내부에서 해당 값만 설정됩니다. 이런 식으로하면 더 효율적으로 보일 것입니다. – stakx

+0

지금 당장 해보겠습니다. Btw @stakx는 들여 쓰기를 줄이는 지름길과 같거나 수동으로 수행해야합니까? 나는 다른 삶의 팁과 함께 똑같은 것을 요구하는 VS에 관한 글을 작성하려고 생각하고있다. 편집 : 나는 그것이 작동하도록했습니다. 나는 또한 cmd.parameters.Clear()를 시도했는데, 이것이 받아 들일 수 있는가, 아니면 당신의 제안으로 변경해야 하는가? – Aroueterra

+0

@Vendredi : 먼저 텍스트의 일부 줄을 선택한 다음 Ctrl + K를 눌러 들여 쓰기를 4 칸씩 줄일 수 있습니다. – stakx