我无法从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 :(得分: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();
}
}