我遇到以下(簡化)代碼的間歇性死鎖情況。ADO.NET DeadLock
DataSet my_dataset = new DataSet()
SqlCommand sql_command = new SqlCommand();
sql_command.Connection = <valid connection>
sql_command.CommandType = CommandType.Text;
sql_command.CommandText = 'SELECT * FROM MyView ORDER BY 1'
SqlDataAdapter data_adapter = new SqlDataAdapter(sql_command);
sql_command.Connection.Open();
data_adapter.Fill(my_dataset);
sql_command.Connection.Close();
我得到的錯誤是:
事務(進程ID 269)是 死鎖的鎖資源與 另一個進程,並已被選作 死鎖犧牲品。重新運行 交易。
據我所知,只需通過ADO.Net .Fill()命令填充數據集不應在數據庫上創建鎖定。 而且,它將從錯誤消息中看出該鎖由另一個進程擁有。 我查詢的視圖僅具有選擇語句,但它確實將幾個表連接在一起。
- 只能進入select語句的視圖是否會受鎖定記錄的影響?
- Can/Does ADO.Net .Fill()鎖定記錄?
- 假設我需要填充一個DataSet,有沒有辦法避免潛在的數據鎖?
的SQL Server 2005(9.0.4035)
您能否擴展這方面的信息?我會非常感興趣的任何解釋性文件或鏈接,以及這種行爲如何以及爲什麼會通過。 – 0xCAFEBABE 2010-11-04 10:55:51
@TME。我添加了更多信息。 – YWE 2010-11-04 14:17:57
ADO「Classic」具有不同的鎖定級別......我想知道現在,ADO.NET的默認鎖定級別是什麼?上面的方法是如何去「調整」連接本身?如果將IsolationLevel設置爲Snapshot或ReadUncommited,是否還有讀鎖定? – 2010-11-04 14:31:55