更新时间:2026-07-28 GMT+08:00
执行SQL语句
为了执行SQL语句,ODBC提供一组专门的API,并在表1中集中列出了相关API并进行了说明。这些API覆盖了SQL的预处理、参数绑定、直接执行以及语句属性设置等功能,是应用程序与数据库进行指令交互的核心接口。
- ODBC为应用程序与数据库的中心层,负责把应用程序发出的SQL指令传到数据库当中,自身并不解析SQL语法。故在应用程序中写入带有保密信息的SQL语句时(如明文密码),保密信息会被暴露在驱动日志中。
- 数据库中收到的一次执行请求(不在事务块中),如果含有多条语句,将会被打包成一个事务,如果其中有一个语句失败,那么整个请求都将会被回滚。
- 关闭事务自动提交后,需要显式手动提交事务,否则可能引发问题。例如,执行SELECT语句时会隐式开启事务,如果不手动提交,该隐式事务将无法正常结束,演变为长事务,导致一系列潜在问题。
示例如下(完整示例请参考获取和处理数据库中的数据):
// 申请语句句柄。 SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt); // 设置语句属性。 SQLSetStmtAttr(V_OD_hstmt, SQL_ATTR_QUERY_TIMEOUT, (SQLPOINTER *)3, 0); // 直接执行SQL语句。 SQLExecDirect(V_OD_hstmt, "drop table IF EXISTS customer_t1", SQL_NTS); SQLExecDirect(V_OD_hstmt, "CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));", SQL_NTS); SQLExecDirect(V_OD_hstmt, "insert into customer_t1 values(25, 'li')", SQL_NTS); // 准备执行。 SQLPrepare(V_OD_hstmt, "insert into customer_t1 values(?)", SQL_NTS); // 绑定参数。 SQLBindParameter(V_OD_hstmt,1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0, &value, 0, NULL); // 执行准备好的语句。 SQLExecute(V_OD_hstmt); SQLExecDirect(V_OD_hstmt, "select c_customer_sk from customer_t1", SQL_NTS);
父主题: 开发步骤