1

Microsoft SQL Server データベースから特定のデータベースとユーザーとログインをインポートおよびエクスポートできるプログラムを作成しようとしています。コードと ODBC の間に、他の多くのソフトウェアが使用する抽象レイヤーがあります。抽象化レイヤーは通常、自動コミットをオフにして実行し、トランザクションを独自に処理しますが、BACKUP コマンドはどのトランザクションでも実行されることを好まないため、私は層の別の方法を使用しています。これは、自動コミットをオンにして実行する executeDirect と呼ばれます。

このメソッドは、SQLExecDirect 関数を使用して BACKUP コマンドを実行します。完了すると、関数は SUCCESS_WITH_INFO を返します。これは、BACKUP コマンドで 3 行の出力が必要になるためです。次に、コードは SQLGetDiagField を使用して出力を取得しようとし、レコード #1 から最初の行を収集できますが、レコード #2 はありません。

メソッドが最後にやりたいことは、接続をリセットして自動コミットをオフにすることですが、それを試みると、「接続は別のコマンドの結果でビジーです」というエラーが発生し、SQL 状態は「HY000」になります。したがって、明らかに、接続は他の 2 行の出力を送信したいと考えていますが、そうする方法がわかりません。

4

1 に答える 1

1

BACKUP DATABASE コマンドはバッチとして機能し、バックアップを続行するには SQLMoreResults を呼び出す必要があります。

于 2008-11-12T15:31:47.640 に答える