私はVS2008、V3.5を使ってVB6ウィンドウアプリケーションをC#に変換しています。私はデータの格納と検索に使用するSQL Server 2000データベースを持っています。 C#ので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
私は現在、このやっている:
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();
を一つのテーブルには、私は次の操作を行いVB6でInt型のものであり、引用番号を生成するために使用されている単一のレコード、すなわち、123456を保持しています
残念ながら、同じインデックス番号の複数のインスタンスが同時に表示されたときに、複数のユーザーが同時にレコードにヒットしたときに、カーソルロックが「adLockPessimistic」になっていないことがわかりました。誰もがこの特定の目的のためにC#でADODB.Recordsetを使用する方法を説明するか、必要に応じてdbレコードをロックするためにレコードロックを使用するか、または.NETフレームワークとC#プリンシパルのより良い方法で同じことを達成できます、私は素晴らしいだろう。事前に多くの感謝。
ノエル
ADO.NETを調べましたか? –
トランザクションでラップする –
私はあなたの投稿権を読んでいるなら、IDフィールドに同じ値を持つ別のレコードを避けようとしています。ほとんどのデータストレージ製品は、デフォルトでこれをサポートしています。もしあなたが作成失敗(try-catch-finallyブロックを介して)中に新しいIDを1つずつ自動的にインクリメントし、異なるユーザーセグメントに対して異なるIDステッピングチェーンを実行し、パフォーマンスを構築するデータの検証とそれに続く提出の責任を負うサービスキューイングデータの提出は、RCが言及したトランザクションでラッピングすることはおそらく最も簡単です。 – Hardryv