ODBC Driver for Microsoft Dynamics 365 Business Central

Build 24.0.9062

バッチ処理

CData ODBC Driver for Microsoft Dynamics 365 Business Central は、ODBC Batch API を介してMicrosoft Dynamics 365 Business Central で一括ロードをサポートします。本製品 は、関連する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 NameArray[MAX_INSERT_COUNT][MAX_BUFFER_SIZE] = { 0 };
SQLLEN cbNameArray[MAX_INSERT_COUNT] = { 0 };
...
retcode = SQLSetStmtAttr(pHstmt, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)MAX_INSERT_COUNT, 0);
char *Name1 = "Jon Doe", *Name2 = "John";
cbNameArray[0] = strlen(Name1);
cbNameArray[1] = strlen(Name2);
memcpy(NameArray[0], Name1, strlen(Name1));
memcpy(NameArray[1], Name2, strlen(Name2));
retcode = SQLBindParameter(pHstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, NameArray, MAX_BUFFER_SIZE, cbNameArray);

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

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

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

一括更新

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

SQLHSTMT pHstmt = NULL;
const int MAX_UPDATE_COUNT = 2;
const int MAX_BUFFER_SIZE = 100;
char accountidArray[MAX_UPDATE_COUNT][MAX_BUFFER_SIZE] = { 0 };
char AccountIdArray[MAX_UPDATE_COUNT][MAX_BUFFER_SIZE] = { 0 };
SQLLEN cbaccountidArray[MAX_UPDATE_COUNT] = { 0 };
SQLLEN cbAccountIdArray[MAX_UPDATE_COUNT] = { 0 };
...
retcode = SQLSetStmtAttr(pHstmt, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)MAX_UPDATE_COUNT, 0);
char *Name1 = "Jon Doe", *Name2 = "John";
char *AccountId1 = "AccountId1", *AccountId2 = "AccountId2";
cbNameArray[0] = strlen(Name1);
cbNameArray[1] = strlen(Name2);
cbAccountIdArray[0] = strlen(AccountId1);
cbAccountIdArray[1] = strlen(AccountId2);
memcpy(NameArray[0], Name1, strlen(Name1));
memcpy(NameArray[1], Name2, strlen(Name2));
memcpy(AccountIdArray[0], AccountId1, strlen(AccountId1));
memcpy(AccountIdArray[1], AccountId2, strlen(AccountId2));
retcode = SQLBindParameter(pHstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, NameArray, MAX_BUFFER_SIZE, cbNameArray);
retcode = SQLBindParameter(pHstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 0, 0, AccountIdArray, MAX_BUFFER_SIZE, cbAccountIdArray);

retcode = SQLExecDirect(pHstmt, (SQLCHAR*) "UPDATE Accounts SET Name = ? WHERE AccountId = ?", SQL_NTS); 

一括削除

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

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

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

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