問題タブ [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.
perl - SQLite データベースへのメモリ内のみの変更
外部から提供された sqlite データベースでperl を使用して、静的に提供される Web サイト用に約 9k ページを事前生成しています。
元のデータにいくつかのアルゴリズムの改善がありますが、一貫性を保つために、スクリプトで元のデータベースをそのままにしておき、メモリ内のデータのみを変更する方が理にかなっていると思います (必要に応じて、データベース全体が収まる必要があります)。問題のない RAM)、Web ページを生成する前に。
どうすればいいですか?
ここで、ある種の SQL トランザクション機能 (スクリプトが完了したら破棄する必要があります) の恩恵を受けることができると思いますが、それは正しいですか? 元のデータベース ファイルを変更せずに保持したいという制約を考えると、それは良い考えのように思えますか? (たとえば、Perl から SQLite を使用する場合、進行中のトランザクションのデータはどこにどのように保存されますか?) 必要なことを達成する他の方法はありますか? (私は perl と sql の初心者です。注釈付きのコード サンプルを探しています。)
最後の手段として、いつでもファイル システム内にデータベース ファイルのコピーを作成できると思いますが、それは醜く非効率的な解決策のように思えます。
foreign-keys - 複数のテーブルを持つ SQL トランザクション
- DISTRIBUTION_LIST、USERS、および ADDRESSES の 3 つのテーブルがあります。
- 単一のオブジェクト 'distribution_list' に複数のユーザーとアドレスがあります。
- これらの 3 つのテーブルに一緒に書き込むトランザクションを作成したいのですが、テーブル USERS と ADDRESSES の FOREIGN_KEY は、AUTO INCREMENT である DISTRIBUTION_LIST の PRIMARY_KEY です。
実際、私の問題はすでに説明しましたが、データを USERS と ADDRESSES に挿入するステートメントを作成するときに、DISTRIBUTION_LIST から PRIMARY_KEY を知るにはどうすればよいですか? PRIMARY_KEY を手動で計算する 1 つの解決策ですが、このタスクにはより洗練された解決策がありますか?
c# - sqltransaction の BeginTransaction() がフリーズします。try catch を使用して解決するにはどうすればよいですか?
SqlTransaction transaction = connection.BeginTransaction()
C# アプリケーションで SQLServer からデータを取得するために使用しています。
サーバーへの接続がない(インターネット接続がない)場合に発生する問題は、アプリケーションがフリーズして動作を停止し、例外もエラーもなく、フリーズするだけです。
エラーをキャッチするために使用しようとしtry catch
ましたが、それでもアプリケーションがフリーズするだけで、唯一のオプションはアプリケーションを強制終了することです。誰でもこのエラーをキャッチするのを手伝ってもらえますか?フリーズする代わりにエラーが発生します-のようにConnection to server failed. Please check internet connection.
接続用のクラスコードは次のとおりです。
問題は次のとおりです。
前もって感謝します。
PS アプリケーションは問題なく動作します。これまでのところ唯一の問題は、インターネットへの接続が失われたことです。私は解決策を見つけることができませんでした...
c# - C# による SQL トランザクション
私は C# Windows アプリケーションを持っています。「フォーム 1」で「ボタン 1」をクリックすると、いくつかのテーブルにデータを書き込むプロセスがあります。そのプロセスには通常 10 分かかります。あるユーザーがその「ボタン1」をクリックすると、同じDBとプログラムを使用している別のユーザーが、同じテーブルにデータを挿入する別のフォームの別のボタンをクリックします。
ボタン1をクリックすると、SQLトランザクションが開始され、プロセスが終了した後にコミットされます。
問題は、そのプロセスを実行しているときに、2 番目のユーザーがタイムアウト エラーになり、プロセスを完了できないことです。
これには何ができますか?SQLトランザクションの開始時に、プロセスに使用するテーブルがロックされていませんか?
c# - SQLTransaction Multiadd 応答リダイレクトが機能しない
トランザクションを使用して、異なるデータベース テーブルを追加しています。追加するResponse.redirect("");
とエラーが発生します:SQLTransaction complete; is no longer available.
response.redirectを削除すると、エラーなしで正常に動作しています。
c# - 接続間でトランザクションを共有する
私は FileShare クローラーを持っています (権限を取得し、後で監査するためにそれらをどこかにドロップします)。現在、同じフォルダーをクロールするために複数のスレッドを開始しています (プロセスを高速化するため)。
C# では、各オブジェクトには、呼び出しによって開始されるSqlConnection
独自のがあります。SqlTransaction
SqlConnection.BeginTransaction()
現在のソリューションの疑似コードは次のとおりです。
- フォルダのリストを取得する
- 各フォルダについて、サブフォルダのリストを取得します
- サブフォルダーごとにスレッドを開始して、ファイル共有を収集します
- 各スレッドは収集したデータをデータベースに保存します
- データベースで監査レポートを実行する
サブフォルダのスレッドの 1 つが失敗すると、問題が発生します。「簡単に検出できない」部分的なフォルダ スキャンに行き着きます。主な理由は、各スレッドが別々の接続で実行されていることです。
不完全なスキャンを行うのではなく、各フォルダーを同じトランザクションでコミットしたいと考えています (現在の状況では、一部のスレッドが失敗した場合)。トランザクションの概念は実装されていませんが、オプションを評価しています。
この回答のコメントに基づいて、プロデューサー/コンシューマーキューはオプションですが、残念ながらメモリは制限されています(開始されたスレッドの数による)。プロデューサ/コンシューマ スペースが RAM 制限を克服するためにディスクにコミットされている場合、実行時間は増加します (メモリ I/O と比較してディスク I/O が非常に限られているため)。私はメモリ/時間の妥協で立ち往生していると思います。他の提案はありますか?
c# - C# を使用した ado.net で SqlTransaction が高速なのはなぜですか?
私はasp.net Webアプリケーションプロジェクトに取り組んでいます。
SqlTransaction を使用して、SqlTransaction を使用せずに同じ操作を試みました。SqlTransaction を使用しているコードの実行時間は、SqlTransaction を使用していないコードよりも高速です。
その背後にある理由を知りたいのですが、SqlTransaction がパフォーマンスに与える影響を教えてください。
どちらのコードも、SqlTransaction を使用して同じアクションを実行します。
c# - C# で SQLTransaction が機能しない
1 つの関数内でトランザクションを開きました。この関数は、SqlDataTable のデータを更新するストアド プロシージャを呼び出します。ロールバックまたはコミットせずにこの関数から戻った後、同じ DataTable からデータを返す必要がある他の関数を呼び出します。最初の関数を呼び出す必要があります。トランザクションをコミットまたはロールバックします。しかし、2 番目の関数が機能しません。
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 に設定されていることがわかります。これは私にとって奇妙な振る舞いです。