#include #include #include "common.h" void write_output(const unsigned char *buf, int count) { FILE *fs = fopen("value.txt", "wb"); if (fs == NULL) { fprintf(stderr, "fopen failed: %s\n", strerror(errno)); } else { unsigned char bom[2] = { 0xFF, 0xFE }; fwrite(bom, 1, 2, fs); fwrite(buf, 1, count, fs); fclose(fs); } } int main(int argc, char **argv) { SQLRETURN rc; SQLLEN sqlLen; HSTMT hstmt = SQL_NULL_HSTMT; char *sql; char buf[8192]; wchar_t wbuf[8192]; test_connect(); rc = SQLAllocStmt(conn, &hstmt); if (!SQL_SUCCEEDED(rc)) { print_diag("failed to allocate stmt handle", SQL_HANDLE_DBC, conn); exit(1); } /* Run a query with a result set with all kinds of values */ sql = "SELECT body FROM macros WHERE name = 'check_pruefziffer'"; rc = SQLExecDirect(hstmt, (SQLCHAR *)sql, SQL_NTS); CHECK_STMT_RESULT(rc, "SQLExecDirect failed", hstmt); /* Fetch result */ rc = SQLFetch(hstmt); CHECK_STMT_RESULT(rc, "SQLFetch failed", hstmt); rc = SQLGetData(hstmt, 1, SQL_C_WCHAR, wbuf, sizeof(wbuf), &sqlLen); CHECK_STMT_RESULT(rc, "SQLGetData failed", hstmt); wprintf(L"varcharcol: %s\n", wbuf); printf("strlen = %u\n", wcslen(wbuf)); printf("sqlLen = %d\n", sqlLen); write_output((unsigned char *) wbuf, sqlLen); rc = SQLFreeStmt(hstmt, SQL_CLOSE); CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt); /* Clean up */ test_disconnect(); puts("Press ENTER to exit..."); fgets(buf, sizeof buf, stdin); return 0; }