0

私は C# Windows アプリケーションを持っています。「フォーム 1」で「ボタン 1」をクリックすると、いくつかのテーブルにデータを書き込むプロセスがあります。そのプロセスには通常 10 分かかります。あるユーザーがその「ボタン1」をクリックすると、同じDBとプログラムを使用している別のユーザーが、同じテーブルにデータを挿入する別のフォームの別のボタンをクリックします。

ボタン1をクリックすると、SQLトランザクションが開始され、プロセスが終了した後にコミットされます。

問題は、そのプロセスを実行しているときに、2 番目のユーザーがタイムアウト エラーになり、プロセスを完了できないことです。

これには何ができますか?SQLトランザクションの開始時に、プロセスに使用するテーブルがロックされていませんか?

4

3 に答える 3

1

シンプルなソリューションですが、ユーザーが長時間待つ必要がある場合があります。

これを達成するためにスレッドを使用している場合(winform)、作業状態として label1 を使用します。

   void transaction(data)
    { 
     try
     {
       thread.sleep(100);
       sqltransaction(data);//whatever your code is
     }
    catch(Exception)
     {
       transaction(data);
       label1.Invoke((MethodInvoker)(() => label1.Text = "Requested pending , do not close the program";
     }
       label1.Invoke((MethodInvoker)(() => label1.Text = "Working...";
    }

これは、実際には修正できないエラーを通常処理する方法です。

ありがとう

于 2014-04-11T06:03:22.900 に答える