事务(进程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....");
}
}
sql服务器表:
id = int
CIVILIDD = bigint
TEL8 = nvarchar (MAX)
答案 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();
}
或
在运行single_user
之前将数据库更改为update
,然后将其还原回multi_user
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);
也会发生这种情况
using SqlCommand
和using SqlConnection
,请检查所有sql连接和命令创建。我认为这可能是由于连接和命令尚未处理而失败的原因。commandtimeout
和connectiontimeout
,commandtimeout
设置进行研究会导致您的查询一直等待,直到设置了该查询为止设为0。connectiontimeout
将导致您的连接尝试等待,直到设置为0为止建立连接。