执行Insert语句示例代码
c
void main()
{
char szDSN[] = "XuguDB";
char szUID[] = "SYSDBA";
char szAuth[] = "SYSDBA";
SQLHENV henv = NULL;
SQLHDBC hdbc = NULL;
SQLHSTMT hstmt = NULL;
SQLRETURN ret = 0;
ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
ret = SQLConnect(hdbc, (SQLCHAR*)szDSN, SQL_NTS, (SQLCHAR*)szUID, SQL_NTS, (SQLCHAR*)szAuth, SQL_NTS);
if (ret != SQL_SUCCESS)
{
SQLCHAR sqlState[128];
SQLINTEGER nativeErr;
SQLCHAR errMsg[256];
SQLSMALLINT len;
SQLGetDiagRec(SQL_HANDLE_DBC, hdbc, 1, sqlState, &nativeErr, errMsg, 200, &len);
printf("Can't connect to server, reason: %s\n", errMsg);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return;
}
printf("Connect successful!\n");
ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
char sql[] = "insert into mytable(c1,c2,c3,c4,c5) values(?,?,?,?,?)";
ret = SQLPrepare(hstmt, (SQLCHAR*)sql, SQL_NTS);
if (ret != SQL_SUCCESS)
{
SQLCHAR sqlState[128];
SQLINTEGER nativeErr;
SQLCHAR errMsg[256];
SQLSMALLINT len;
SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, 1, sqlState, &nativeErr, errMsg, 200, &len);
printf("SQLPrepare failed, reason: %s\n", errMsg);
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
SQLFreeHandle(SQL_HANDLE_ENV, henv);
return;
}
SQLLEN cbLen1, cbLen2, cbLen3, cbLen4, cbLen5;
DATE_STRUCT date;
TIME_STRUCT time;
TIMESTAMP_STRUCT dt;
date.year = 2022;
date.month = 5;
date.day = 1;
time.hour = 11;
time.minute = 12;
time.second = 13;
dt.year = 2022;
dt.month = 5;
dt.day = 1;
dt.hour = 11;
dt.minute = 12;
dt.second = 13;
char timeWTZ[] = "10:11:12.0 +08:00";
char dtWTZ[] = "1990-01-01 01:02:03 +08:00";
cbLen1 = sizeof(DATE_STRUCT);
cbLen2 = sizeof(TIME_STRUCT);
cbLen3 = sizeof(TIMESTAMP_STRUCT);
cbLen4 = strlen(timeWTZ);
cbLen5 = strlen(dtWTZ);
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_DATE, SQL_DATE, 10, 0, &date, 10, &cbLen1);
SQLBindParameter(hstmt, 2, SQL_PARAM_INPUT, SQL_C_TIME, SQL_TIME, 11, 0, &time, 11, &cbLen3);
SQLBindParameter(hstmt, 3, SQL_PARAM_INPUT, SQL_C_TIMESTAMP, SQL_TIMESTAMP, 11, 0, &dt, 11, &cbLen3);
SQLBindParameter(hstmt, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 21, 0, timeWTZ, 21, &cbLen4);
SQLBindParameter(hstmt, 5, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 30, 0, dtWTZ, 30, &cbLen5);
ret = SQLExecute(hstmt);
if (SQL_SUCCESS != ret)
{
SQLCHAR sqlState[128];
SQLINTEGER nativeErr;
SQLCHAR errMsg[256];
SQLSMALLINT len;
SQLGetDiagRec(SQL_HANDLE_STMT, hstmt, 1, sqlState, &nativeErr, errMsg, 200, &len);
printf("SQLExecute failed, reason: %s\n", errMsg);
}
else
printf("Inesrt successful!\n");
ret = SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
ret = SQLDisconnect(hdbc);
ret = SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
ret = SQLFreeHandle(SQL_HANDLE_ENV, henv);
}