2011-12-15 91 views
3

我正在使用VS2008,V3.5將VB6 Windows應用程序轉換爲C#。我有一個用於數據存儲和檢索的SQL Server 2000數據庫。一個表保存一個記錄是int類型,用於生成報價數量,即123456在VB6我做了以下內容:C#等效於adodb記錄集

OpenDBCon 
Set rst = New ADODB.Recordset 
rst.Open "SELECT idx From tblQuoteIdx", cn, adOpenDynamic, adLockPessimistic 
Select Case rst.BOF 
Case False 
    rst.MoveFirst 
     Me.txtRef = rst!idx 
     tID = rst!idx + 1 
    OKToContinue = True 
Case False 
    'Do something 
End Select 

If OKToContinue = True Then 
    Set rst = New ADODB.Recordset 
    rst.Open "update tblQuoteIdx set idx = '" & tID & "' ", cn, adOpenDynamic, 
    adLockPessimistic 
End If 
CloseDBCon 

在C#我目前正在做的:

 SqlConnection conn = new SqlConnection(); 
     conn.ConnectionString = Vars.connstring; 
     conn.Open(); 
     SqlCommand sqlComm = new SqlCommand("Select idx from tblQuoteIdx", conn); 
     Int32 tt = (Int32)sqlComm.ExecuteScalar(); 
     Int32 tt2 = tt++; 
     SqlCommand sqlComm2 = new SqlCommand("Update tblQuoteIdx set " + 
     "idx = " + tt2 + "", conn); 
     sqlComm.ExecuteNonQuery(); 
     conn.Close(); 

不幸的是,我發現現在沒有遊標鎖定「adLockPessimistic」,當多人同時擊中記錄時,同一索引號的多個實例可以顯示出來。如果任何人都可以解釋如何在C#中使用ADODB.Recordset用於此特定目的,或者使用記錄鎖定以便在需要時鎖定數據庫記錄,或者使用.Net框架和C#主體中的更好方法來完成相同的事情,我會很感激。提前謝謝了。

諾埃爾

+0

你看過ADO.NET嗎? – 2011-12-15 14:14:58

回答

2

我相信你會發現這篇文章有用: Pessimistic locking in ado.net 基本上你需要在儘快適用於記錄鎖定爲編輯開始交易來包裝的一切。這樣,除非釋放鎖定,否則其他方法都無法編輯這些值。