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

C# 从DataGridView获取数据并导出到数据库,c#,oledb,C#,Oledb,我无法从DataGridView获取所需数据。它只导出第一行数据 数据库: acct_no | first_name | last_name | mid_name ----------------------------------------------------------- 201 | first1 | last1 | mid1 202 | first2 | last2 | mid2 203 | first

我无法从
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);
    }
}
for(inti=0;i试试这个:

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();
            }
        }

for(int i=0;i问题:由于我在循环中看不到您的
ExecuteNonQuery()
语句,我怀疑您正在循环结束时执行查询

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

假设您正在使用OleDb,我认为
OleDb
不支持
命名参数
。因此,在查询中提供问号而不是参数名称

解决方案1:在循环内执行
命令.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();
}

for(int i=0;i)您还应该指出,
foreach(dataGridView1.Rows[i].Cells中的var单元格)
在这里没有意义,应该是这样的removed@AbZy:谢谢亲爱的:),我已经做了更改,非常感谢@Sudhakar和@sabzy。它似乎工作得很好。只有一个问题。任务完成后,会出现一条异常消息:参数ACCT_no没有默认值VALUE@SudhakarTillapudi先生,是什么导致“溢出”oledb异常?@rein:您是否检查了我编辑的答案,
oledb
不支持命名参数。我看不出您的示例中有什么问题。所有行似乎都在这里