問題タブ [sqltransaction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
406 参照

perl - SQLite データベースへのメモリ内のみの変更

外部から提供された sqlite データベースでperl を使用して、静的に提供される Web サイト用に約 9k ページを事前生成しています。

元のデータにいくつかのアルゴリズムの改善がありますが、一貫性を保つために、スクリプトで元のデータベースをそのままにしておき、メモリ内のデータのみを変更する方が理にかなっていると思います (必要に応じて、データベース全体が収まる必要があります)。問題のない RAM)、Web ページを生成する前に。

どうすればいいですか?

ここで、ある種の SQL トランザクション機能 (スクリプトが完了したら破棄する必要があります) の恩恵を受けることができると思いますが、それは正しいですか? 元のデータベース ファイルを変更せずに保持したいという制約を考えると、それは良い考えのように思えますか? (たとえば、Perl から SQLite を使用する場合、進行中のトランザクションのデータはどこにどのように保存されますか?) 必要なことを達成する他の方法はありますか? (私は perl と sql の初心者です。注釈付きのコード サンプルを探しています。)

最後の手段として、いつでもファイル システム内にデータベース ファイルのコピーを作成できると思いますが、それは醜く非効率的な解決策のように思えます。

0 投票する
0 に答える
131 参照

foreign-keys - 複数のテーブルを持つ SQL トランザクション

  1. DISTRIBUTION_LIST、USERS、および ADDRESSES の 3 つのテーブルがあります。
  2. 単一のオブジェクト 'distribution_list' に複数のユーザーとアドレスがあります。
  3. これらの 3 つのテーブルに一緒に書き込むトランザクションを作成したいのですが、テーブル USERS と ADDRESSES の FOREIGN_KEY は、AUTO INCREMENT である DISTRIBUTION_LIST の PRIMARY_KEY です。

実際、私の問題はすでに説明しましたが、データを USERS と ADDRESSES に挿入するステートメントを作成するときに、DISTRIBUTION_LIST から PRIMARY_KEY を知るにはどうすればよいですか? PRIMARY_KEY を手動で計算する 1 つの解決策ですが、このタスクにはより洗練された解決策がありますか? ここに画像の説明を入力

0 投票する
1 に答える
1013 参照

c# - sqltransaction の BeginTransaction() がフリーズします。try catch を使用して解決するにはどうすればよいですか?

SqlTransaction transaction = connection.BeginTransaction()C# アプリケーションで SQLServer からデータを取得するために使用しています。

サーバーへの接続がない(インターネット接続がない)場合に発生する問題は、アプリケーションがフリーズして動作を停止し、例外もエラーもなく、フリーズするだけです。

エラーをキャッチするために使用しようとしtry catchましたが、それでもアプリケーションがフリーズするだけで、唯一のオプションはアプリケーションを強制終了することです。誰でもこのエラーをキャッチするのを手伝ってもらえますか?フリーズする代わりにエラーが発生します-のようにConnection to server failed. Please check internet connection.

接続用のクラスコードは次のとおりです。

問題は次のとおりです。

前もって感謝します。

PS アプリケーションは問題なく動作します。これまでのところ唯一の問題は、インターネットへの接続が失われたことです。私は解決策を見つけることができませんでした...

0 投票する
3 に答える
240 参照

c# - C# による SQL トランザクション

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

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

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

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

0 投票する
1 に答える
227 参照

c# - SQLTransaction Multiadd 応答リダイレクトが機能しない

トランザクションを使用して、異なるデータベース テーブルを追加しています。追加するResponse.redirect("");とエラーが発生します:SQLTransaction complete; is no longer available.response.redirectを削除すると、エラーなしで正常に動作しています。

0 投票する
1 に答える
987 参照

c# - 接続間でトランザクションを共有する

私は FileShare クローラーを持っています (権限を取得し、後で監査するためにそれらをどこかにドロップします)。現在、同じフォルダーをクロールするために複数のスレッドを開始しています (プロセスを高速化するため)。

C# では、各オブジェクトには、呼び出しによって開始されるSqlConnection独自のがあります。SqlTransactionSqlConnection.BeginTransaction()

現在のソリューションの疑似コードは次のとおりです。

  1. フォルダのリストを取得する
  2. 各フォルダについて、サブフォルダのリストを取得します
  3. サブフォルダーごとにスレッドを開始して、ファイル共有を収集します
  4. 各スレッドは収集したデータをデータベースに保存します
  5. データベースで監査レポートを実行する

サブフォルダのスレッドの 1 つが失敗すると、問題が発生します。「簡単に検出できない」部分的なフォルダ スキャンに行き着きます。主な理由は、各スレッドが別々の接続で実行されていることです。

不完全なスキャンを行うのではなく、各フォルダーを同じトランザクションでコミットしたいと考えています (現在の状況では、一部のスレッドが失敗した場合)。トランザクションの概念は実装されていませんが、オプションを評価しています。

この回答のコメントに基づいて、プロデューサー/コンシューマーキューはオプションですが、残念ながらメモリは制限されています(開始されたスレッドの数による)。プロデューサ/コンシューマ スペースが RAM 制限を克服するためにディスクにコミットされている場合、実行時間は増加します (メモリ I/O と比較してディスク I/O が非常に限られているため)。私はメモリ/時間の妥協で立ち往生していると思います。他の提案はありますか?

0 投票する
0 に答える
376 参照

c# - C# を使用した ado.net で SqlTransaction が高速なのはなぜですか?

私はasp.net Webアプリケーションプロジェクトに取り組んでいます。

SqlTransaction を使用して、SqlTransaction を使用せずに同じ操作を試みました。SqlTransaction を使用しているコードの実行時間は、SqlTransaction を使用していないコードよりも高速です。

その背後にある理由を知りたいのですが、SqlTransaction がパフォーマンスに与える影響を教えてください。

どちらのコードも、SqlTransaction を使用して同じアクションを実行します。

0 投票する
1 に答える
618 参照

c# - C# で SQLTransaction が機能しない

1 つの関数内でトランザクションを開きました。この関数は、SqlDataTable のデータを更新するストアド プロシージャを呼び出します。ロールバックまたはコミットせずにこの関数から戻った後、同じ DataTable からデータを返す必要がある他の関数を呼び出します。最初の関数を呼び出す必要があります。トランザクションをコミットまたはロールバックします。しかし、2 番目の関数が機能しません。

0 投票する
1 に答える
891 参照

c# - Poison メッセージ例外で完了した SQL Server ブローカ トランザクション

C# アプリケーションで 2008 R2 の SQL Server Broker を使用しており、SQL Server が有害なメッセージを検出してターゲット キューを無効にしたケースを処理しようとしています。

この場合、メッセージを受信しようとすると SqlException がスローされます。その時点で、私が使用している SqlTransaction はコミットできなくなったようです。

このチュートリアルを使用して、私の C# コードと共にデモを行います。

最初に、チュートリアルの T-SQL コードを使用して必要なサービス ブローカー オブジェクトを作成し、メッセージを送信してターゲット キューに配置します。

次に、コンソール アプリケーションであるこの C# コードを実行します。

上記のコードは、動作のデモンストレーションにすぎません。もちろん、通常このように Rollback を受け取って呼び出すことはありません。

Receive メソッドはメッセージを受信し、トランザクションで Rollback を呼び出して、有害なメッセージの動作を刺激します。Receive への 6 回目の呼び出しで、期待どおりにキューが無効になっているため、SQLException がスローされます。

この時点で、キューを再度有効にし、有害なメッセージを取り除き、会話を終了したいと思います (終了は必要ありません)。これはすべて機能しますが、その有害なメッセージをキューから外したいので、トランザクションをコミットします。

結果 コミット呼び出しで例外がスローされます。

この SqlTransaction は完了しました。使用できなくなります。

Receive の 6 回目の呼び出しで Rollback または Commit が呼び出されずに、このトランザクションがどのように完了したのでしょうか?

また、TargetQueue1DB のメッセージはどのように削除されたのですか? コミットされたトランザクション内にない限り、受信はキューからメッセージを削除しないと思いました。ただし、コミットが呼び出される前に TargetQueue1DB を見ると、キューは空です。

SqlException がキャッチされたときに waitCommand がスコープ内にあるようにコードを少し変更すると、waitCommand インスタンスの Connection プロパティと Transaction プロパティが null に設定されていることがわかります。これは私にとって奇妙な振る舞いです。