从DataGridView获取数据并导出到数据库

时间:2014-03-06 15:46:11

标签: c# oledb

我无法从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);
    }
}

2 个答案:

答案 0 :(得分:2)

问题:由于我在循环中看不到您的ExecuteNonQuery()语句,我怀疑您是在循环结束时执行查询。

编辑1:正如@AbZy在评论中建议的那样,foreach循环没有任何意义,因为您要添加当前cell的所有row值。 因此,请删除foreach循环。

假设您正在使用OleDb,我认为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();
}

答案 1 :(得分: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();
            }
        }