SQLRowCount 関数

準拠
導入されたバージョン: ODBC 1.0 Standards Compliance: ISO 92

まとめ
SQLRowCount はUPDATEINSERT、または DELETE ステートメントの影響を受ける行の数 返します。 SQLBulkOperations でのSQL_ADD、SQL_UPDATE_BY_BOOKMARK、またはSQL_DELETE_BY_BOOKMARK操作。または SQLSetPos のSQL_UPDATEまたはSQL_DELETE操作。

構文

  
SQLRETURN SQLRowCount(  
      SQLHSTMT   StatementHandle,  
      SQLLEN *   RowCountPtr);  

引数

StatementHandle
[入力]ステートメント ハンドル。

RowCountPtr
[出力]行数を返すバッファーを指します。 UPDATEINSERTおよび DELETE ステートメントの場合、SQLBulkOperations のSQL_ADD、SQL_UPDATE_BY_BOOKMARK、SQL_DELETE_BY_BOOKMARK操作、および SQLSetPos のSQL_UPDATE操作またはSQL_DELETE操作の場合、*RowCountPtr で返される値は、要求の影響を受ける行の数か、影響を受ける行の数が使用できない場合は -1 になります。

SQLExecuteSQLExecDirectSQLBulkOperationsSQLSetPos、または SQLMoreResults が呼び出されると、診断データ構造のSQL_DIAG_ROW_COUNT フィールドが行数に設定され、行数は実装に依存する方法でキャッシュされます。 SQLRowCount は 、キャッシュされた行数の値を返します。 キャッシュされた行数の値は、ステートメント ハンドルが準備済みまたは割り当て済み状態に戻されるか、ステートメントが再実行されるか、 SQLCloseCursor が呼び出されるまで有効です。 SQL_DIAG_ROW_COUNT フィールドが設定された後に関数が呼び出された場合、 SQLRowCount によって返される値は、任意の関数呼び出しによって SQL_DIAG_ROW_COUNT フィールドが 0 にリセットされるため、SQL_DIAG_ROW_COUNT フィールドの値と異なる場合があることに注意してください。

その他のステートメントと関数の場合、ドライバーは *RowCountPtr で返される値を定義できます。 たとえば、一部のデータ ソースでは、行をフェッチする前に SELECT ステートメントまたはカタログ関数によって返される行数を返すことができます。

Note

多くのデータ ソースでは、フェッチ前に結果セット内の行数を返すことはできません。相互運用性を最大限に高める場合、アプリケーションはこの動作に依存しないようにする必要があります。

戻り値

SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、またはSQL_INVALID_HANDLE。

診断

SQLRowCount がSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合、関連付けられている SQLSTATE 値を取得するには、HandleType が SQL_HANDLE_STMT で、Handle of StatementHandle を指定して SQLGetDiagRec を呼び出します。 次の表に、 SQLRowCount によって一般的に返される SQLSTATE 値の一覧を示し、この関数のコンテキストでそれぞれについて説明します。表記 "(DM)" は、ドライバー マネージャーによって返される SQLSTATEs の説明の前にあります。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERRORされます。

SQLSTATE エラー 説明
01000 一般的な警告 ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。
HY000 一般的なエラー 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLGetDiagRec によって返されるエラー メッセージは、エラーとその原因を説明します。
HY001 メモリ割り当てエラー ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てることができませんでした。
HY010 関数シーケンス エラー (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、 SQLRowCount 関数が呼び出されたときにまだ実行されていました。

(DM) StatementHandle に対して SQLExecuteSQLExecDirect、または SQLMoreResults が呼び出され、SQL_PARAM_DATA_AVAILABLE返されました。 この関数は、ストリーミングされたすべてのパラメーターのデータが取得される前に呼び出されました。

(DM) この関数は、StatementHandle対して SQLExecuteSQLExecDirectSQLBulkOperations、または SQLSetPos を呼び出す前に呼び出されました。

(DM) 非同期実行関数が StatementHandle に対して呼び出され、この関数が呼び出されたときにはまだ実行されていました。

(DM) StatementHandle に対して SQLExecuteSQLExecDirectSQLBulkOperations、または SQLSetPos が呼び出され、SQL_NEED_DATA返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。
HY013 メモリ管理エラー メモリ不足の可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。
HY117 不明なトランザクション状態が原因で接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 (DM) 中断状態の詳細については、「 SQLEndTran 関数」を参照してください。
HYT01 接続のタイムアウト データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、 SQLSetConnectAttr (SQL_ATTR_CONNECTION_TIMEOUT) によって設定されます。
IM001 ドライバーは、この関数をサポートしていません (DM) StatementHandle に関連付けられているドライバーは、 関数をサポートしていません。

説明

ステートメント ハンドルで実行された最後の SQL ステートメントが UPDATEINSERT、または DELETE ステートメントでない場合、または SQLBulkOperations の前回の呼び出しで Operation 引数がSQL_ADD、SQL_UPDATE_BY_BOOKMARK、またはSQL_DELETE_BY_BOOKMARKされていない場合、または SQLSetPos の前回の呼び出しの Operation 引数がSQL_UPDATEまたはSQL_DELETEされていない場合は、 *RowCountPtr の値はドライバー定義です。 詳細については、「 影響を受ける行数の決定」を参照してください。

対象 解決方法については、
SQL ステートメントの実行 SQLExecDirect 関数
準備された SQL ステートメントの実行 SQLExecute 関数

参照

ODBC API リファレンス
ODBC ヘッダー ファイル