如果只设置 SQL_ATTR_ROW_ARRAY_SIZE > 1,而在绑定列的时候依然是SQL_ATTR_ROW_ARRAY_SIZE == 1时的缓存大小,在vc运行中将会导致一个HEAP_CORRUPT。在mingw中可能什么也不报,但是程序就停止在读数据的地方。
所以一定要在SQL_ATTR_ROW_ARRAY_SIZE > 1时,设置正确的缓冲区。
70 BindData projectname(100);
71
72 size_t fetchSize = 3;
73 SQLSetStmtAttr(stmt.getHandle().getHandle(),
74 SQL_ATTR_ROW_ARRAY_SIZE,
75 (SQLPOINTER)fetchSize,
76 SQL_IS_UINTEGER);
77
78 bindcol(stmt,meta.getColumnMetaData(0),id);
79 bindcol(stmt,meta.getColumnMetaData(1),areacode);
80 bindcol(stmt,meta.getColumnMetaData(2),category);
81 bindcol(stmt,meta.getColumnMetaData(3),projectname);
82
83 while(cursor.fetchNext())
84 cout<< meta.getColumnMetaData(0).getColumnName()
85 << "=" << id.m_mem.getValue<int>()
86 << ","
87 << meta.getColumnMetaData(1).getColumnName()
88 << "=" << (char*)areacode.m_mem.getRawBlock(
)
89 << ","
@
11 lines yanked
73,3-17 56%
分享到:
相关推荐
分配好句柄之后,我们可以调用 SQLSetEnvAttr ( V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0 ),SQL_ATTR_ODBC_VERSION 是存放你定义的 ODBC 版本号的变量,SQL_OV_ODBC3 则说明你的程序使用的是 ...
* SQLBindCol(m_hStmt, 3, SQL_CHAR, szDefDbName, 32, &cbValue):绑定缺省数据库名称 * SQLBindCol(m_hStmt, 4, SQL_CHAR, szDefLanguage, 32, &cbValue):绑定缺省语言 * m_RetCode = SQLFetch(m_hStmt):获取...
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); // 分配连接句柄 ret = SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc); // 连接数据库 ret = SQLDriverConnect(dbc, NULL, dsn, SQL_NTS,...
SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); // 分配连接句柄 SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc); // 连接数据库 retCode = SQLDriverConnect(hDbc, NULL, "DSN=...
SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); // 分配连接句柄 SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); // 连接到数据库 retcode = SQLDriverConnect(hdbc, NULL, "DSN=...
r = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); if (r != SQL_SUCCESS) { cout !" ; exit(1); } ``` - 设置 ODBC 版本为 3.0。 - 如果设置失败,则输出错误信息并退出程序。 ...
SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); // 分配连接句柄 SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc); // 连接到数据库 SQLConnect(hDbc, "DSN_NAME", SQL_NTS, "USERNAME...
- **SQLBindCol**: 用于绑定列到应用程序中定义的数据变量。具体的列类型可以转换为C数据类型,具体转换规则如下表所示(表2.2.1)。 - **SQLBindParameter**: 用于绑定参数到预编译的SQL语句中。支持从C数据类型向...
初始化 ODBC 环境的步骤是通过调用 SQLAllocHandle 分配环境句柄,并设置环境属性 SQL_ATTR_ODBC_VERSION 为 SQL_OV_ODBC3,这表示我们要使用 ODBC 3.x 版本的特性。然后,使用 SQLAllocHandle 分配连接句柄,并通过...
ret = SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); ret = SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc); ret = SQLDriverConnect(hDbc, NULL, (SQLCHAR*)"DSN=MyDSN;UID=myuser;...
$dbh = new PDO('odbc:gbasedb, 'gbasedbt', 'gbasedbt', array(PDO::ODBC_ATTR_USE_CURSOR_LIBRARY => 2)); foreach ($dbh->query('select * from t1') as $row) { print_r($row); } ``` 这段代码将使查询正常...
4. **绑定数据**:`SQLBindCol` 用于将应用程序的缓冲区与结果集中的列关联,以便读取数据。同样,`SQLBindParameter` 可用于绑定输入/输出参数。 5. **处理错误和诊断**:当遇到错误或警告时,可以使用 `...
- `SQLDescribeCol`和`SQLBindCol`函数用于描述列信息和绑定列到应用程序变量。 6. **提交事务**: - 如果应用程序支持事务,可以使用`SQLEndTran`函数提交或回滚事务。在多用户环境中,事务管理确保数据的一致性...
6. **处理结果集**:通过`SQLBindCol`将结果集的列绑定到本地变量,以便读取数据。这个示例只绑定了6列,但实际可能有更多列。 7. **释放资源**:最后,使用`SQLFreeConnect`释放连接句柄,`SQLFreeEnv`释放环境...
5. **处理结果集**:如果执行的是查询,使用`SQLFetch`或`SQLFetchScroll`函数获取结果集的行,使用`SQLDescribeCol`获取列信息,使用`SQLBindCol`绑定结果到应用程序变量。 6. **关闭和释放资源**:执行完所有操作...
在处理结果集时,ODBC提供了一组函数,如SQLBindCol用于绑定结果集列到应用程序变量,SQLGetData用于获取当前行的数据,SQLRowCount用于获取受影响的行数。当你完成数据处理后,记得使用SQLFreeStmt释放资源,断开...
通过`SQLBindCol`函数,可以将结果集中每列的数据绑定到应用程序的缓冲区。 2.5.7 ODBC中BLOB字段数据的处理 处理二进制大对象(BLOB)需要特殊的方法,如使用`SQLGetData`来获取BLOB字段的值。 2.5.8 ODBC对事务...
6. **处理结果**:通过`SQLBindCol`绑定列到C++变量,从而读取查询结果。 7. **关闭连接**:在完成所有操作后,应释放所有句柄并断开连接,使用`SQLFreeHandle`释放句柄资源。 8. **异常处理**:在ODBC编程中,...
5. **数据操作**:说明如何使用`SQLFetch`和`SQLBindCol`获取查询结果,以及如何使用`SQLExecute`执行DML(数据操纵语言)语句如INSERT、UPDATE和DELETE。 6. **错误处理**:阐述如何通过ODBC API检查和处理可能...