我想将数据从空DataGridView插入数据库(DataGridView不从数据库加载,但我只是在DataGridView中获取值)。
我试过这段代码:
private void vButton12_Click(object sender, EventArgs e)
{
MySqlConnection conn = new MySqlConnection("server=localhost;User Id=root;database=sma9");
DataTable dtable = new DataTable();
MySqlDataAdapter adp = new MySqlDataAdapter("select * from tdetpinjam", conn);
adp.Fill(dtable);
for (int i = 0; i < dtable.Rows.Count; i++)
{
MySqlDataAdapter adp1 = new MySqlDataAdapter("INSERT INTO tdetpinjam (nopinjam,kodebuku,jumlah,tglkembali,status) VALUES ('" + dtable.Rows[i][dtable.Columns.IndexOf("Column1")] + "','" + dtable.Rows[i][dtable.Columns.IndexOf("Column2")] + "','" + dtable.Rows[i][dtable.Columns.IndexOf("Column3")] + "','" + dtable.Rows[i][dtable.Columns.IndexOf("Column4")] + "','" + dtable.Rows[i][dtable.Columns.IndexOf("Column5")] + "')", conn);
conn.Open();
adp1.Fill(dtable);
conn.Close();
}
}
但我收到错误“找不到列-1”。
我的代码有什么问题?这样做的最佳解决方案是什么?
答案 0 :(得分:1)
我猜其中一个返回-1:
dtable.Columns.IndexOf("ColumnX")
答案 1 :(得分:0)
你正在做的是完全错误的,代码中没有与数据网格相关的代码,你只是从数据库表中获取数据并循环返回每一行并尝试将相同的数据再次插入到数据库中的同一个表中。在每个项目中,您尝试从数据库填充相同的表。
当获得给定列的索引时,会发生实际错误,需要在插入
之前对其进行验证 if(dtable.Columns.IndexOf("Column1") != -1 &&
dtable.Columns.IndexOf("Column2") != -1 &&
dtable.Columns.IndexOf("Column3") != -1 &&
dtable.Columns.IndexOf("Column4") != -1 &&
dtable.Columns.IndexOf("Column5") != -1)
{
// insert related code
}
如果需要使用MySqlDataAdapter插入记录,请先设置选择,更新和插入MySqlDataAdapter命令,然后调用MySqlDataAdapter.Update方法。
查看this了解详情。
foreach (DataGridViewRow row in dataGrid.Rows)
{
foreach (DataGridViewCell cell in row.Cells)
{
string value = cell.Value.ToString();
}
}