65.9K
CodeProject 正在变化。 阅读更多。
Home

EasyODBC

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.72/5 (25投票s)

2003年8月20日

BSD

2分钟阅读

viewsIcon

132467

downloadIcon

5511

一个易于使用的 ODBC C++ 封装类。

引言

MFC 提供了像 CDatabaseCResultSet 这样的封装类,用于从您的 C++ 应用程序访问数据库。但是,如果您想避免在应用程序中使用 MFC,那么您只有一个选择 - 调用底层 ODBC 函数。EasyODBC 是一个 C++ 代码库,它提供了封装 Win32 ODBC 函数的简单类。

背景

要使用 EasyODBC 中的类,您应该具备数据库和 SQL 的基本知识。并且您应该对 C++ 和 Visual C++ IDE 有一定的使用经验。如果您熟悉 JDBC(Java 数据库连接),那么 EasyODBC 中的类使用起来会更容易。

使用代码

要使用 EasyODBC,首先使用 #include 预处理器指令包含 *easy_odbc.h*。 EasyODBC 中的所有类都是一个名为 easyodbc 的命名空间的一部分。

要打开到 ODBC 数据源的连接,您必须创建 Database 类的一个对象,并调用它的 Open() 成员函数

easyodbc::Database db;
db.Open("MY_ODBC","username","password");

要从数据库检索数据,您必须使用 ResultSet

easyodbc::ResultSet rslt = db.ExecuteQuery("SELECT * FROM emp");

关于结果集的信息,例如其中的列数,可以通过调用 GetMetaData() 函数获得,该函数返回一个 ResultSetMetaData 对象。

easyodbc::ResultSetMetaData mtdt = rslt.GetMetaData();
int column_count = mtdt.GetColumnCount();
printf("\n%d Columns returned\n",column_count);

要获取关于特定列的信息,请调用 ResultSetMetaDataGetColumn 成员函数

easyodbc::Column col;
mtdt.GetColumn(1,&col);

存储在 ResultSet 中的数据必须绑定到内存缓冲区才能进行检索。这可以使用 ResultSetBind() 函数完成

char strName[26];
rslt.Bind(1,strName,25); // arguments: column number, 
                         // buffer, maximum length of buffer

上面的代码将表中的第一列与缓冲区 strName 绑定。现在,每当 ResultSet 返回数据时,第一列的数据将存储在变量 strName 中。可以通过调用 MoveFirst()MoveNext()MovePrevious()MoveLast() 成员函数从 ResultSet 对象中提取数据。 例如,以下代码打印出 ResultSet 中第一列的值

while(rslt.MoveNext()) {
    printf("%s\n",strName);
}

要执行任何其他 SQL 语句,您必须调用 DatabaseExecute() 成员函数

db.Execute("DELETE FROM emp");

Exceute() 函数将返回受语句影响的行数。在数据库操作结束后,您必须通过调用类 DatabaseClose() 函数来释放 ODBC 占用的资源。

EasyODBC 提供了 EasyODBCException 类来处理 ODBC 异常。所有 EasyODBC 代码都应该被包含在一个像这样的 try-catch 块中

try {
// easy_odbc code
}catch(easyodbc::EasyODBCException *ex) {
 char buff[51];
 ex->GetMessage(buff);
 printf("Error: %s",buff);
}

在演示项目中,您会发现一个完整的工作程序,演示了各种 EasyODBC 类的使用。

历史

  • 创建日期:2003年5月27日
  • 上次更新:2003年8月12日
© . All rights reserved.