LOBデータを挿入するサンプル ソース コードを以下に示します。
最初のステップは、パラメータ付きinsert文の準備です。最初のパラメータは、この行の識別に使用される数値キーです。2つ目のパラメータは、BLOBデータです。
2つ目のパラメータは、SQL_LONGVARBINARYデータ型として指定されます。
LOBデータの長さは、SQL_LEN_DATA_AT_EXECマクロの呼び出しで指定されます。
SQLINTEGER id; SQLCHAR image[IMAGEPART_LEN ]; SQLINTEGER cbid = 0; SQLUINTEGER cbimage = 0; SQLRETURN retcode; retcode = SQLPrepare(hstmt, (SQLCHAR *)"insert into blobtable (id, image) values (?, ?)", SQL_NTS); if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) { // Bind the parameters. retcode = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 10, 0, &id, 0, &cbid); retcode = SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_LONGVARBINARY, LOBSIZE, 0, (SQLPOINTER) 2, 0, &cbimage); //Set the 1. parameter (id) id = 1001; //Set the 2. parameter (image) cbimage = SQL_LEN_DATA_AT_EXEC(0);
SQL_LEN_DATA_AT_EXEC(0)のように長さを0に設定すると、長さが不明であるという意味になります。
次のステップは、データの挿入です。LOBデータは非常に大きい可能性があるため、分割されて挿入されます。
// Execute the request retcode = SQLExecute(hstmt); // For the data-at-execution parameter (2. parameter) // call SQLParamData and SQLPutData repeatedly // to insert the BLOB data in parts. while (retcode == SQL_NEED_DATA) { retcode = SQLParamData(hstmt, NULL); while (GetUserData(image, IMAGEPART_LEN )) { SQLPutData(hstmt, image, IMAGEPART_LEN ); } } }