ODBC Driver for Microsoft Dynamics 365

Build 24.0.9062

バッチ処理

CData ODBC Driver for Microsoft Dynamics 365 は、ODBC Batch API を介してMicrosoft Dynamics 365 で一括ロードをサポートします。本製品 は、関連するSQL データ操作ステートメントを1つのバルクAPI 要求に変換することによって同時に実行できます。アプリケーションのコードでは、本製品 は一連の入力とパラメータ化されたクエリに基づいてステートメントを実行します。

バッチ更新プロシージャ

バッチ更新を実行するには、次の手順を実行してください。

  1. ステートメント内の各パラメータのカラム値の配列を定義します。
  2. SQL_ATTR_PARAMSET_SIZE ステートメント属性を設定します。
  3. 各配列を各パラメータにバインドします。
  4. パラメータ化されたステートメントを実行します。

一括挿入

次のコードは、SQLSetStmtAttr、SQLBindParameter、およびSQLExecDirect を使って一括挿入を実行する方法を示します。

SQLHSTMT pHstmt = NULL;
const int MAX_INSERT_COUNT = 2;
const int MAX_BUFFER_SIZE = 100;
char GoalHeadingIdArray[MAX_INSERT_COUNT][MAX_BUFFER_SIZE] = { 0 };
SQLLEN cbGoalHeadingIdArray[MAX_INSERT_COUNT] = { 0 };
...
retcode = SQLSetStmtAttr(pHstmt, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)MAX_INSERT_COUNT, 0);
char *GoalHeadingId1 = "Jon Doe", *GoalHeadingId2 = "John";
cbGoalHeadingIdArray[0] = strlen(GoalHeadingId1);
cbGoalHeadingIdArray[1] = strlen(GoalHeadingId2);
memcpy(GoalHeadingIdArray[0], GoalHeadingId1, strlen(GoalHeadingId1));
memcpy(GoalHeadingIdArray[1], GoalHeadingId2, strlen(GoalHeadingId2));
retcode = SQLBindParameter(pHstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, GoalHeadingIdArray, MAX_BUFFER_SIZE, cbGoalHeadingIdArray);

retcode = SQLExecDirect(pHstmt, (SQLCHAR*) "INSERT INTO GoalHeadings (GoalHeadingId) VALUES (?)", SQL_NTS); 

新しいレコードのId を取得するには、LastResultInfo テーブルをクエリします。

SQLExecDirect(hstmt, (SQLTCHAR*)"SELECT * FROM LastResultInfo#TEMP", SQL_NTS);  
SQLTCHAR sGoalHeadingId[20] = {0};
SQLLEN cbGoalHeadingId = 0;
SQLBindCol(hstmt, 1, SQL_C_CHAR, sGoalHeadingId, 20, &cbGoalHeadingId);
SQLRETURN retcode = SQLFetch(hstmt);   

一括更新

更新するレコードの主キーの配列を指定する必要があります。次のコードは、SQLSetStmtAttr、SQLBindParameter、およびSQLExecDirect を使って一括更新を実行する方法を示します。

SQLHSTMT pHstmt = NULL;
const int MAX_UPDATE_COUNT = 2;
const int MAX_BUFFER_SIZE = 100;
char GoalHeadingIdArray[MAX_UPDATE_COUNT][MAX_BUFFER_SIZE] = { 0 };
char GoalHeadingIdArray[MAX_UPDATE_COUNT][MAX_BUFFER_SIZE] = { 0 };
SQLLEN cbGoalHeadingIdArray[MAX_UPDATE_COUNT] = { 0 };
SQLLEN cbGoalHeadingIdArray[MAX_UPDATE_COUNT] = { 0 };
...
retcode = SQLSetStmtAttr(pHstmt, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)MAX_UPDATE_COUNT, 0);
char *GoalHeadingId1 = "Jon Doe", *GoalHeadingId2 = "John";
char *GoalHeadingId1 = "GoalHeadingId1", *GoalHeadingId2 = "GoalHeadingId2";
cbGoalHeadingIdArray[0] = strlen(GoalHeadingId1);
cbGoalHeadingIdArray[1] = strlen(GoalHeadingId2);
cbGoalHeadingIdArray[0] = strlen(GoalHeadingId1);
cbGoalHeadingIdArray[1] = strlen(GoalHeadingId2);
memcpy(GoalHeadingIdArray[0], GoalHeadingId1, strlen(GoalHeadingId1));
memcpy(GoalHeadingIdArray[1], GoalHeadingId2, strlen(GoalHeadingId2));
memcpy(GoalHeadingIdArray[0], GoalHeadingId1, strlen(GoalHeadingId1));
memcpy(GoalHeadingIdArray[1], GoalHeadingId2, strlen(GoalHeadingId2));
retcode = SQLBindParameter(pHstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, GoalHeadingIdArray, MAX_BUFFER_SIZE, cbGoalHeadingIdArray);
retcode = SQLBindParameter(pHstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, GoalHeadingIdArray, MAX_BUFFER_SIZE, cbGoalHeadingIdArray);

retcode = SQLExecDirect(pHstmt, (SQLCHAR*) "UPDATE GoalHeadings SET GoalHeadingId = ? WHERE GoalHeadingId = ?", SQL_NTS); 

一括削除

削除するレコードの主キーの配列を指定する必要があります。次のコードは、SQLSetStmtAttr、SQLBindParameter、およびSQLExecDirect を使って一括削除を実行する方法を示します。

 
SQLHSTMT pHstmt = NULL;
const int MAX_DELETE_COUNT = 2;
const int MAX_BUFFER_SIZE = 100;
char GoalHeadingIdArray[MAX_DELETE_COUNT][MAX_BUFFER_SIZE] = { 0 };
SQLLEN cbGoalHeadingIdArray[MAX_DELETE_COUNT] = { 0 };
...
retcode = SQLSetStmtAttr(pHstmt, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)MAX_DELETE_COUNT, 0);
char *GoalHeadingId1 = "GoalHeadingId1", *GoalHeadingId2 = "GoalHeadingId2";
cbGoalHeadingIdArray[0] = strlen(GoalHeadingId1);
cbGoalHeadingIdArray[1] = strlen(GoalHeadingId2);
memcpy(GoalHeadingIdArray[0], GoalHeadingId1, strlen(GoalHeadingId1));
memcpy(GoalHeadingIdArray[1], GoalHeadingId2, strlen(GoalHeadingId2));
retcode = SQLBindParameter(pHstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, GoalHeadingIdArray, MAX_BUFFER_SIZE, cbGoalHeadingIdArray);

retcode = SQLExecDirect(pHstmt, (SQLCHAR*) "DELETE FROM GoalHeadings WHERE GoalHeadingId = ?", SQL_NTS); 

Copyright (c) 2024 CData Software, Inc. - All rights reserved.
Build 24.0.9062