Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - プログラミング » SQL Anywhere データ・アクセス API » SQL Anywhere .NET 2.0 API リファレンス » iAnywhere.Data.SQLAnywhere ネームスペース (.NET 2.0) » SACommand クラス

 

EndExecuteReader メソッド

SQL 文またはストアド・プロシージャの非同期実行を終了し、要求された SADataReader を返します。

構文
Visual Basic

Public Function EndExecuteReader( _
   ByVal asyncResult As IAsyncResult _
) As SADataReader
C#

public SADataReader EndExecuteReader(
   IAsyncResult asyncResult
);
パラメータ
  • asyncResult   SACommand.BeginExecuteReader への呼び出しによって返される IAsyncResult。

戻り値

要求されたローの取り出しに使用する SADataReader オブジェクト (SACommand.ExecuteReader と同じ動作)。

備考

BeginExecuteReader を呼び出すごとに、EndExecuteReader を呼び出す必要があります。呼び出しは、BeginExecuteReader が返されてから行います。ADO.NET はスレッドに対応していないため、各自で BeginExecuteReader が返されたことを確認する必要があります。EndExecuteReader に渡される IAsyncResult は、完了する BeginExecuteReader 呼び出しから返される IAsyncResult と同じです。EndExecuteReade を呼び出して、BeginExecuteNonQuery への呼び出しを終了すると、エラーになります。逆についても同様です。

コマンドの実行中にエラーが発生すると、EndExecuteReader が呼び出されるときに例外がスローされます。

実行の完了を待機するには、4 通りの方法があります。

(1) EndExecuteReader を呼び出す。

EndExecuteReader を呼び出すと、コマンドが完了するまでブロックします。次に例を示します。

SAConnection conn = new SAConnection("DSN=SQL Anywhere 11 Demo");
conn.Open();
SACommand cmd = new SACommand( "SELECT * FROM Departments", 
  conn );
IAsyncResult res = cmd.BeginExecuteReader();
// perform other work
// this will block until the command completes
SADataReader reader = cmd.EndExecuteReader( res );

(2) IAsyncResult の IsCompleted プロパティをポーリングする。

IAsyncResult の IsCompleted プロパティをポーリングできます。次に例を示します。

SAConnection conn = new SAConnection("DSN=SQL Anywhere 11 Demo");
conn.Open();
SACommand cmd = new SACommand( "SELECT * FROM Departments", 
  conn );
IAsyncResult res = cmd.BeginExecuteReader();
while( !res.IsCompleted ) {
// do other work
}
// this will not block because the command is finished
SADataReader reader = cmd.EndExecuteReader( res );

(3) IAsyncResult.AsyncWaitHandle プロパティを使用して同期オブジェクトを取得する。

IAsyncResult.AsyncWaitHandle プロパティを使用して同期オブジェクトを取得し、その状態で待機できます。次に例を示します。

SAConnection conn = new SAConnection("DSN=SQL Anywhere 11 Demo");
conn.Open();
SACommand cmd = new SACommand( "SELECT * FROM Departments", 
  conn );
IAsyncResult res = cmd.BeginExecuteReader();
// perform other work
WaitHandle wh = res.AsyncWaitHandle;
wh.WaitOne();
// this will not block because the command is finished
SADataReader reader = cmd.EndExecuteReader( res );

(4) BeginExecuteReader の呼び出し時にコールバック関数を指定する。

BeginExecuteReader の呼び出し時にコールバック関数を指定できます。次に例を示します。

private void callbackFunction( IAsyncResult ar )
{
   SACommand cmd = (SACommand) ar.AsyncState;
   // this won’t block since the command has completed
            SADataReader reader = cmd.EndExecuteReader();
}
// elsewhere in the code
private void DoStuff() 
{
      SAConnection conn = new SAConnection("DSN=SQL Anywhere 11 Demo");
      conn.Open();
            SACommand cmd = new SACommand( "SELECT * FROM Departments", 
        conn );
   IAsyncResult res = cmd.BeginExecuteReader( callbackFunction, cmd );
   // perform other work.  The callback function will be 
   // called when the command completes
}

コールバック関数は別のスレッドで実行するため、スレッド化されたプログラム内でのユーザ・インタフェースの更新に関する通常の注意が適用されます。

参照