CCommand::Close
コマンドに関連付けられたアクセサーの行セットを解放します。
void Close( );
解説
コマンドは、行セット、結果セットのアクセサーと (省略可能)パラメーター アクセサーを使用します (パラメーターをサポートしないため、パラメーター アクセサーを必要としない)テーブルとは異なり。
コマンドを実行すると、コマンドの後に Close と ReleaseCommand の両方をダイヤルする必要があります。
同じコマンドを繰り返し実行するとき Close を呼び出すことによって Executeを呼び出す前に各結果セットのアクセサーを解放する必要があります。文字列の終わりに、 ReleaseCommandを呼び出して、パラメーター アクセサーを解放する必要があります。別の一般的なシナリオは、出力パラメーターを持つストーアド プロシージャを呼び出しています。多くのプロバイダーで結果セットのアクセサーを閉じるまで (SQL Server 用の OLE DB プロバイダーなどの出力パラメーター値はアクセスできなくなります。したがって、返された行セット結果セットのアクセサーを、パラメーター アクセサーに閉じるに Close クエリし、出力パラメーター値を取得できるようになります。
使用例
同じコマンドを繰り返し実行すると Close と ReleaseCommand をダイヤルする方法を次の例に示します。
void DoCCommandTest()
{
HRESULT hr;
hr = CoInitialize(NULL);
CCustomer rs; // Your CCommand-derived class
rs.m_BillingID = 6611; // Open billing ID 6611
hr = rs.OpenAll(); // (Open also executes the command)
hr = rs.MoveFirst(); // Move to the first row and print it
_tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),
rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);
// Close the first command execution
rs.Close();
rs.m_BillingID = 3333; // Open billing ID 3333 (a new customer)
hr = rs.Open(); // (Open also executes the command)
hr = rs.MoveFirst(); // Move to the first row and print it
_tprintf_s(_T("First name: %s, Last Name: %s, Customer ID: %d, Postal Code: %s\n"),
rs.m_ContactFirstName, rs.m_L_Name, rs.m_CustomerID, rs.m_PostalCode);
// Close the second command execution;
// Instead of the two following lines
// you could simply call rs.CloseAll()
// (a wizard-generated method):
rs.Close();
rs.ReleaseCommand();
CoUninitialize();
}
必要条件
ヘッダー: atldbcli.h