準拠
導入されたバージョン: ODBC 1.0 標準コンプライアンス: ISO 92
まとめ
SQLRowCount は、 UPDATE、 INSERT、または 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
[出力]行数を返すバッファーを指します。
UPDATE、INSERT、DELETE文、SQLBulkOperationsのSQL_ADD、SQL_UPDATE_BY_BOOKMARK、SQL_DELETE_BY_BOOKMARK操作、SQLSetPosのSQL_UPDATEまたはSQL_DELETE操作については、*RowCountPtrで返される値は、リクエストに影響を受ける行数、影響を受ける行数が利用できない場合は -1 となります。
SQLExecute、SQLExecDirect、SQLBulkOperations、SQLSetPos、または SQLMoreResults が呼び出されると、診断データ構造のSQL_DIAG_ROW_COUNT フィールドが行数に設定され、行数は実装に依存する方法でキャッシュされます。
SQLRowCount は、キャッシュされた行数の値を返します。
キャッシュされた行数の値は、ステートメント ハンドルが準備済みまたは割り当て済み状態に戻されるか、ステートメントが再実行されるか、
その他のステートメントや関数の場合、ドライバーは *RowCountPtr で返される値を定義できます。 たとえば、一部のデータ ソースは、行をフェッチする前に、 SELECT ステートメントまたはカタログ関数によって返される行の数を返すことができます。
Note
多くのデータ ソースは、フェッチ前に結果セット内の行数を返すことができません。相互運用性を最大限に高める場合、アプリケーションはこの動作に依存しないようにする必要があります。
返品
SQL_SUCCESS、SQL_SUCCESS_WITH_INFO、SQL_ERROR、またはSQL_INVALID_HANDLE。
診断
SQLRowCountがSQL_ERRORまたはSQL_SUCCESS_WITH_INFOを返す場合は、SQL_HANDLE_STMTのHandleTypeとStatementHandleのHandleを使用してSQLGetDiagRecを呼び出すことによって、関連付けられている SQLSTATE 値を取得できます。 次の表に、 SQLRowCount によって一般的に返される SQLSTATE 値を示し、この関数のコンテキストでそれぞれについて説明します。表記 "(DM)" は、ドライバー マネージャーによって返される SQLSTATEs の説明の前にあります。 特に明記されていない限り、各 SQLSTATE 値に関連付けられている戻りコードはSQL_ERROR。
| SQLSTATE | エラー | 説明 |
|---|---|---|
| 01000 | 一般的な警告 | ドライバー固有の情報メッセージ。 (関数はSQL_SUCCESS_WITH_INFOを返します。 |
| HY000 | 一般的なエラー | 特定の SQLSTATE がなく、実装固有の SQLSTATE が定義されていないエラーが発生しました。 *MessageText バッファー内の SQLGetDiagRec によって返されるエラー メッセージには、エラーとその原因が記述されています。 |
| HY001 | メモリ割り当てエラー | ドライバーは、関数の実行または完了をサポートするために必要なメモリを割り当てませんでした。 |
| HY010 | 関数シーケンス エラー | (DM) StatementHandle に関連付けられている接続ハンドルに対して非同期実行関数が呼び出されました。 この非同期関数は、 SQLRowCount 関数が呼び出されたときにまだ実行されていました。 (DM) SQLExecute、 SQLExecDirect、または SQLMoreResultsStatementHandle が呼び出され、SQL_PARAM_DATA_AVAILABLEが返されました。 この関数は、すべてのストリーミング パラメーターのデータが取得される前に呼び出されました。 (DM) SQLExecute、 SQLExecDirect、 SQLBulkOperations、または SQLSetPos を呼び出す前に呼び出 StatementHandle。 (DM) 非同期実行関数が StatementHandle に対して呼び出され、この関数が呼び出されたときにはまだ実行されていました。 (DM) SQLExecute、 SQLExecDirect、 SQLBulkOperations、または SQLSetPos が StatementHandle に対して呼び出され、SQL_NEED_DATAが返されました。 この関数は、すべての実行時データ パラメーターまたは列に対してデータが送信される前に呼び出されました。 |
| HY013 | メモリ管理エラー | メモリが不足している可能性があるため、基になるメモリ オブジェクトにアクセスできなかったため、関数呼び出しを処理できませんでした。 |
| HY117 | 不明なトランザクション状態のため、接続が中断されます。 切断関数と読み取り専用関数のみが許可されます。 | (DM) 中断状態の詳細については、「 SQLEndTran 関数を参照してください。 |
| HYT01 | 接続のタイムアウト | データ ソースが要求に応答する前に、接続タイムアウト期間の有効期限が切れています。 接続タイムアウト期間は、SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr によって設定されます。 |
| IM001 | ドライバーは、この関数をサポートしていません | (DM) StatementHandle に関連付けられているドライバーは、関数をサポートしていません。 |
Comments
もし文ハンドル上で最後に実行されたSQL文がUPDATE、INSERT、またはDELETE文でなかったり、前回のSQLBulkOperations呼び出しのOperation引数がSQL_ADD、SQL_UPDATE_BY_BOOKMARK、SQL_DELETE_BY_BOOKMARKでなかったり、前回のSQLSetPos呼び出しのOperation引数がSQL_UPDATEやSQL_DELETEでなかった場合、 *RowCountPtrの値はドライバーによって定義されます。 詳細については、「影響を受ける行の数の決定」を参照してください。
関連する関数
| 情報 | 参照トピック |
|---|---|
| SQL ステートメントの実行 | SQLExecDirect 関数 |
| 準備された SQL ステートメントの実行 | SQLExecute 関数 |