Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试从gridview更新时出现死锁错误_C#_Datagridview_Updates_Deadlock - Fatal编程技术网

C# 尝试从gridview更新时出现死锁错误

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("***")) {

事务(进程ID 588)在具有的锁定资源上死锁 另一个进程和已被选为死锁牺牲品。重新运行 交易

当我尝试从datagridview更新数据时,我遇到了这个错误,我该如何解决它,或者我的更新代码有什么问题,谢谢

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,则代码>连接超时将导致您的连接尝试等待,直到连接完成

它是否至少执行了一个?为什么您认为此代码是导致死锁的代码?@gablorico一些记录updated@dedecos因为datagridview中的数据和我只需单击按钮即可使用该代码更新记录。可能dataGridView1。每次添加db行时,行都会自动刷新?注释不适用于扩大讨论;这段对话已经结束了,我明白了。国防部创建的房间允许访问所有
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);