c excel导入oracle数据库
在企业级应用系统中,数据的导入和导出是非常常见的场景,这需要我们使用一些工具完成这个任务。在这个过程中,我们常常会用到C语言、Excel、Oracle等工具。今天我们就来讲一下如何使用C语言将Excel表格数据导入到Oracle数据库中。
首先我们要知道,C语言可以使用ODBC(Open Database Connectivity)API来连接Oracle数据库。而Excel表格数据则可以通过ODBC驱动程序的方式访问。所以,我们可以通过C语言调用Excel的ODBC驱动程序将Excel表格数据读取出来,再通过ODBC API连接数据库,将数据写入数据库中。
下面是一个简单的例子,说明如何通过C语言将Excel表格数据导入到Oracle数据库中:
#include #include #include #include #include int main() { //连接Excel表格 SQLHANDLE hEnv; SQLHANDLE hCon; SQLHANDLE hStmt; SQLRETURN retcode; retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv); retcode = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_UINTEGER); retcode = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hCon); retcode = SQLDriverConnect(hCon, NULL, "DSN=Excel Files;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE); retcode = SQLAllocHandle(SQL_HANDLE_STMT, hCon, &hStmt); //连接Oracle数据库 SQLHANDLE hEnv2; SQLHANDLE hCon2; SQLHANDLE hStmt2; SQLRETURN retcode2; retcode2 = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv2); retcode2 = SQLSetEnvAttr(hEnv2, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_UINTEGER); retcode2 = SQLAllocHandle(SQL_HANDLE_DBC, hEnv2, &hCon2); retcode2 = SQLDriverConnect(hCon2, NULL, "DSN=Oracle;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE); retcode2 = SQLAllocHandle(SQL_HANDLE_STMT, hCon2, &hStmt2); //读取Excel表格数据 retcode = SQLExecDirect(hStmt, "SELECT * FROM [Sheet1$]", SQL_NTS); //将数据导入Oracle数据库中 char insert_sql[100]; int value1; char value2[50]; double value3; while(SQLFetch(hStmt) == SQL_SUCCESS) { SQLGetData(hStmt, 1, SQL_C_LONG, &value1, 0, NULL); SQLGetData(hStmt, 2, SQL_C_CHAR, value2, sizeof(value2), NULL); SQLGetData(hStmt, 3, SQL_C_DOUBLE, &value3, 0, NULL); sprintf(insert_sql, "INSERT INTO test_table (id, name, value) VALUES (%d, '%s', %f)", value1, value2, value3); retcode2 = SQLExecDirect(hStmt2, insert_sql, SQL_NTS); } //释放资源 SQLFreeHandle(SQL_HANDLE_STMT, hStmt); SQLDisconnect(hCon); SQLFreeHandle(SQL_HANDLE_DBC, hCon); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); SQLFreeHandle(SQL_HANDLE_STMT, hStmt2); SQLDisconnect(hCon2); SQLFreeHandle(SQL_HANDLE_DBC, hCon2); SQLFreeHandle(SQL_HANDLE_ENV, hEnv2); return 0; }