我有 DataGridView
在 Windows 窗体中使用 C#。
数据显示成功,更新也成功。
但问题在于插入。当我尝试使用迭代将多个数据插入数据库时,它将 13 次存储到数据库中,因为数据网格最初显示数据库中的 13 条记录。我的意思是它将新行多次(datagridview 行计数)存储到数据库中。
假设我想将两行保存到数据库中,但它将第一行存储到数据库中 13 次(datagridview 行的总数)。
请检查我哪里做错了
注意:我想使用单个 datagridview 来显示、更新、插入和删除数据库中的数据。我有一个按钮,我想通过它开始将所有新行插入到数据库中。
我的代码如下
string connection = System.Configuration.ConfigurationManager.ConnectionStrings["AuzineConnection"].ConnectionString;
using (SqlConnection sqlconn = new SqlConnection(connection))
{
sqlconn.Open();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
if (row.IsNewRow)
{
using (SqlCommand sqlcomm = sqlconn.CreateCommand())
{
//sqlcomm.CommandText = "Insert into QF (profileID, UserNameLogInName, UserFullName,Email, forumtitle, subtitle, subjecttitle ,noreply, noview , qtags ,Question ,Questiondetails ,questionstatus, qdate, Status ,todate) values(@status)";
sqlcomm.CommandText = "Insert into QF (UserNameLogInName,Status ) values(@UserNameLogInName,@status)";
try
{
sqlcomm.Parameters.AddWithValue("UserNameLogInName", dataGridView1.CurrentRow.Cells["UserNameLogInName"].Value.ToString());
sqlcomm.Parameters.AddWithValue("Status", dataGridView1.CurrentRow.Cells["Status"].Value.ToString());
sqlcomm.ExecuteNonQuery();
//MessageBox.Show(dataGridView1.Rows[Convert.ToInt32(RecordIndexNumber.Text)].Cells[Convert.ToInt32(ColInexNum.Text)].Value.ToString());
}
catch (Exception ex)
{
btnInsert.Text = ex.Message.ToString();
}
}
}
}
}
我试过了if (!row.IsNewRow)
它只存储一行。如果没有,它将多个不需要的时间存储到数据库中。
我还使用了 for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
, 但同样的问题要么存储一次,要么存储多次。
我只想插入用户在点击按钮时生成的新行。
最佳答案
试试这个:
sqlcomm.Parameters.AddWithValue("UserNameLogInName", row.Cells["UserNameLogInName"].Value.ToString());
sqlcomm.Parameters.AddWithValue("Status", row.Cells["Status"].Value.ToString());
关于c# - DataGridview 重复数据或不将新行保存到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21613148/