2014-03-06 65 views
0

我无法从DataGridView获取所需的数据。它只导出第一行数据。从DataGridView获取数据并导出到数据库

数据库:

acct_no | first_name | last_name | mid_name 
----------------------------------------------------------- 
    201 | first1  | last1  | mid1 
    202 | first2  | last2  | mid2 
    203 | first3  | last3  | mid2 
----------------------------------------------------------- 

但是当我运行我的代码的结果是:

acct_no | first_name | last_name | mid_name 
----------------------------------------------------------- 
    201 | first1  | last1  | mid1 
    202 | first1  | last1  | mid2 
    203 | first1  | last1  | mid2 
----------------------------------------------------------- 

它没有环路的所有行。这里是我的代码:

for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++) 
{ 
    foreach (var cell in dataGridView1.Rows[i].Cells) 
    { 
     command.CommandText = "INSERT INTO MEMBER (ACCT_NO, LAST_NAME, FIRST_NAME, MID_NAME) VALUES(@ACCT_NO, @LAST_NAME, @FIRST_NAME, @MID_NAME)"; 

     command.Parameters.AddWithValue("@ACCT_NO", dataGridView1.Rows[i].Cells[0].Value); 
     command.Parameters.AddWithValue("@LAST_NAME", dataGridView1.Rows[i].Cells[1].Value); 
     command.Parameters.AddWithValue("@FIRST_NAME", dataGridView1.Rows[i].Cells[2].Value); 
     command.Parameters.AddWithValue("@MID_NAME", dataGridView1.Rows[i].Cells[3].Value); 
    } 
} 
+0

我看不出有什么在你例子的问题。所有的行似乎都在这里 – Plue

回答

2

问题:正如我不能看到环的ExecuteNonQuery()声明,我怀疑你是在年底执行查询循环。

编辑1:作为@AbZy从评论中的foreach循环没有任何意义,因为你是从当前row将所有cell值建议。 因此删除您的foreach循环。我想OleDb支持Named Parameters。因此,而不是参数名称在查询中提供问号。

解决方案1:在循环内执行command.ExecuteNonQuery();语句并清除参数。

只需添加以下两条语句,您的代码:

command.ExecuteNonQuery(); 
command.Parameters.Clear(); 

完整代码:

for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++) 
{ 
command.CommandText = "INSERT INTO RP_CMG01 (ACCT_NO, LAST_NAME, FIRST_NAME, 
       MID_NAME) VALUES(?, ?, ?, ?)"; 
command.Parameters.AddWithValue("@ACCT_NO", dataGridView1.Rows[i].Cells[0].Value); 
command.Parameters.AddWithValue("@LAST_NAME", dataGridView1.Rows[i].Cells[1].Value); 
command.Parameters.AddWithValue("@FIRST_NAME", dataGridView1.Rows[i].Cells[2].Value); 
command.Parameters.AddWithValue("@MID_NAME", dataGridView1.Rows[i].Cells[3].Value); 
command.ExecuteNonQuery(); 
command.Parameters.Clear(); 
} 
+0

你还应该指出'foreach(dataGridView1.Rows [i] .Cells中的var单元格)'在这里没有意义,应该删除它 – AbZy

+1

@AbZy:谢谢亲爱的:),我做了更改 –

+0

AbZy和@Sudhakar,非常感谢你。它似乎工作良好。只是一个问题。完成任务后出现异常消息:PARAMETER ACCT_no HAS NO DEFAULT VALUE – rein

0

试试这个:

for (int i = 0; i <= dataGridView1.Rows.Count - 1; i++) 
     { 
      foreach (var cell in dataGridView1.Rows[i].Cells) 
      { 
       command.CommandText = "INSERT INTO RP_CMG01 (ACCT_NO, LAST_NAME, FIRST_NAME, MID_NAME) VALUES(@ACCT_NO, @LAST_NAME, @FIRST_NAME, @MID_NAME)"; 

       command.Parameters.AddWithValue("@ACCT_NO", dataGridView1.Rows[i].Cells[0].Value); 
       command.Parameters.AddWithValue("@LAST_NAME", dataGridView1.Rows[i].Cells[1].Value); 
       command.Parameters.AddWithValue("@FIRST_NAME", dataGridView1.Rows[i].Cells[2].Value); 
       command.Parameters.AddWithValue("@MID_NAME", dataGridView1.Rows[i].Cells[3].Value); 

       command.ExecuteNoQuery(); 
       command.Parameters.Clear(); 
      } 
     } 
+0

谢谢你在ans的时间。 sir – rein

相关问题