【发布时间】:2019-01-09 09:45:18
【问题描述】:
我使用此代码删除checkbox在datagridview中选择的记录,但是执行该命令需要很长时间
private void delete_Click(object sender, EventArgs e)
{
foreach(DataGridViewRow item in advancedDataGridView1.Rows)
{
if(bool.Parse(item.Cells[0].Value.ToString()))
{
conn.Open();
SqlCommand cmd = new SqlCommand("delete from tabl where id = '" + item.Cells[1].Value.ToString() + "'", conn);
cmd.ExecuteNonQuery();
conn.Close();
}
}
MessageBox.Show("Successfully Deleted....");
}
我将此代码用于复选框
private void Chkselectall_CheckedChanged(object sender, EventArgs e)
{
for(int n = 0; n< advancedDataGridView1.Rows.Count;n++)
{
advancedDataGridView1.Rows[n].Cells[0].Value = chkselectall.Checked;
}
}
我应该怎么做才能解决这个问题?
【问题讨论】:
-
检查生成的 sql-query 并在 sql-server 中使用 profiler 来检测问题。我认为,查询执行需要很多时间
-
乍一看,我会将
conn.Open()和conn.Close()放在循环之外。 -
你的代码看起来像是一个玩 SQL 注入的好地方...谷歌一下“ADO.NET 参数”
-
首先尝试在管理工作室中运行相同的查询,看看是否需要很长时间。如果是,那么您应该查看您的表 schema/indexes.profiling 并检查执行计划将有助于查明瓶颈。另外,在代码中放置普通查询是不安全的,并且还存在可维护性问题。
-
是的,你的代码在询问sql注入,避免方法:stackoverflow.com/questions/14376473/…
标签: c# sql-server database