C# 尝试从gridview更新时出现死锁错误
事务(进程ID 588)在具有的锁定资源上死锁 另一个进程和已被选为死锁牺牲品。重新运行 交易 当我尝试从datagridview更新数据时,我遇到了这个错误,我该如何解决它,或者我的更新代码有什么问题,谢谢C# 尝试从gridview更新时出现死锁错误,c#,datagridview,updates,deadlock,C#,Datagridview,Updates,Deadlock,事务(进程ID 588)在具有的锁定资源上死锁 另一个进程和已被选为死锁牺牲品。重新运行 交易 当我尝试从datagridview更新数据时,我遇到了这个错误,我该如何解决它,或者我的更新代码有什么问题,谢谢 private void Button2_Click(object sender, EventArgs e) { using (SqlConnection con = new SqlConnection("***")) {
private void Button2_Click(object sender, EventArgs e)
{
using (SqlConnection con = new SqlConnection("***"))
{
con.Open();
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
// INSERT command:
using (SqlCommand com = new SqlCommand("UPDATE tabl2 SET TEL8=@TEL8 WHERE id=@id and CIVILIDD=@CIVILIDD ", con))
{
com.Parameters.AddWithValue("@id", dataGridView1.Rows[i].Cells[0].Value);
com.Parameters.AddWithValue("@CIVILIDD", dataGridView1.Rows[i].Cells[1].Value);
com.Parameters.AddWithValue("@TEL8", dataGridView1.Rows[i].Cells[2].Value.ToString());
com.ExecuteNonQuery();
}
}
MessageBox.Show("Successfully UPDATE....");
}
}
如果这样行的话,试试这个
using (SqlCommand com = new SqlCommand("UPDATE tabl2 SET TEL8=@TEL8 WHERE id=@id and CIVILIDD=@CIVILIDD ", con))
{
com.Parameters.Add("@id", SqlDbType.Int);
com.Parameters.Add("@CIVILIDD", SqlDbType.BigInt);
com.Parameters.Add("@TEL8", SqlDbType.NVarChar);
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
com.Parameters["@id"].Value = dataGridView1.Rows[i].Cells[0].Value);
com.Parameters["@CIVILIDD"].Value = dataGridView1.Rows[i].Cells[1].Value);
com.Parameters["@TEL8"].Value = dataGridView1.Rows[i].Cells[2].Value.ToString());
}
com.ExecuteNonQuery();
}
为了实现这一点
- 检查所有sql连接和命令创建,如果它们都在使用
和使用SqlCommand
。我相信这可能是它失败的原因,因为连接和命令尚未处理使用SqlConnection
- 可能是一个非常繁忙的服务器,研究
和命令超时
,连接超时
设置将导致您的查询在设置为0时等待执行查询<如果设置为0,则代码>连接超时将导致您的连接尝试等待,直到连接完成命令超时
using (SqlCommand com = new SqlCommand("UPDATE tabl2 SET TEL8=@TEL8 WHERE id=@id and CIVILIDD=@CIVILIDD ", con))
{
com.Parameters.Add("@id", SqlDbType.Int);
com.Parameters.Add("@CIVILIDD", SqlDbType.BigInt);
com.Parameters.Add("@TEL8", SqlDbType.NVarChar);
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
{
com.Parameters["@id"].Value = dataGridView1.Rows[i].Cells[0].Value);
com.Parameters["@CIVILIDD"].Value = dataGridView1.Rows[i].Cells[1].Value);
com.Parameters["@TEL8"].Value = dataGridView1.Rows[i].Cells[2].Value.ToString());
}
com.ExecuteNonQuery();
}
new SqlCommand("Alter Database {databaseName} SET SINGLE_USER With ROLLBACK IMMEDIATE", con);
//your update commands
new SqlCommand("Alter Database {databaseName} SET MULTI_USER With ROLLBACK IMMEDIATE", con);