CCommand::Close
更新 : 2007 年 11 月
コマンドに関連付けられているアクセサ行セットを解放します。
void Close( );
解説
コマンドは、行セット、結果セット アクセサ、および (オプションで) パラメータ アクセサを使用します。パラメータをサポートせず、パラメータ アクセサを必要としないテーブルとは異なります。
コマンドを実行するときは、コマンドの後に Close と ReleaseCommand の両方を呼び出す必要があります。
同じコマンドを繰り返し実行する場合は、Execute を呼び出す前に Close を呼び出して、その都度結果セット アクセサを解放する必要があります。すべてのコマンドを実行した後に、ReleaseCommand を呼び出してパラメータ アクセサを解放します。もう 1 つの一般的なシナリオとして、出力パラメータを持つストアド プロシージャの呼び出しがあります。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