我正在使用VS2008,V3.5将VB6 windows应用程序转换为C#。我有一个SQL Server 2000数据库,用于数据存储和检索。一个表包含一个Int类型的记录,用于生成报价编号,即123456.在VB6中,我执行以下操作:
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用于此特定目的,或者使用记录锁以便在需要时锁定db记录,或者在.Net框架和C#主体内更好地完成同样的事情。 ,我会很高兴。非常感谢提前。
诺尔
答案 0 :(得分:2)
我相信你会发现这篇文章很有用: Pessimistic locking in ado.net 基本上,您需要在编辑开始时将所有内容包装在对记录应用锁定的事务中。这样,在释放锁之前,没有其他方法可以编辑值。