设为首页 加入收藏

TOP

AppBuilder中进行直接ODBC API数据库调用访问的基本方法(一)
2014-11-23 21:27:47 来源: 作者: 【 】 浏览:1
Tags:AppBuilder 进行 直接 ODBC API 数据库 调用 访问 基本 方法
第一章:如何为你的开发系统配置DSN:

(一)、打开Windows的控制面板。选择ODBC Data Sources图标,双击打开此图标内容,此时出现ODBC Data Source Administrator对话框。

(2)、在对话框中选择User DSN然后你可以选择<添加>按钮来新增一个DSN.

第二章:如何利用ODBC API在VC下面直接编写基于数据库的程序:

ODBC数据库 编程
一、 一般步骤:

分配环境

应用系统在调用任何ODBC函数之前,首先必须初始化ODBC,并建立一个环境。
ODBC用该环境监视应用系统已经建立的 数据库连接。每个应用 系统只建立一个
环境是很有必要的,因为不管有多少连接都可以在一个环境中建立。完成这一分
配过程的ODBC函数SQLAllocEnv在下一小节描述。

SQLAllocEnv
SQLAllocEnv为环境句柄分配内存,并初始化应用系统使用的ODBC调用层接口。
应用系统在调用任何其他ODBC函数之前必须调用SQLAllocEnv。
以下是SQLAllocEnv的语法:
RETCODE SQLAllocEnv(phenv)
SQLAllocEnv的参数如下表所示,其返回码是SQL-ERROR。因为调用SQLError
时无有效句柄,所以该函数没有SQLSTATE返回码;
//分配环境句柄
SQLRETURN m_retcode;
if( m_henv != SQL_NULL_HENV )
return FALSE;
if (SQL_SUCCESS == (m_retcode = SQLAllocEnv( &m_henv )))
{
//创建新的DSN
CreateDSN(IDS_HOME_DSNNAME,IDS_HOME_DBFILENAME);
//分配连接句柄
if (SQL_SUCCESS == (m_retcode = SQLAllocConnect( m_henv, &m_hdbc )))
{
// 连接数据源
if (SQL_SUCCESS == (m_retcode = SQLConnect( m_hdbc, (UCHAR *)((LPCTSTR)m_strDSN), SQL_NTS, NULL, 0, NULL, 0 )))
{
m_bConnected = TRUE;
}
}
}
分配连接句柄

就象应用系统的环境由环境句柄代表一样,连接句柄代表应用系统与数据源
之间的连接。对于应用系统所要连接的每一个数据源而言,都必须分配一个连接
句柄。例如,如果需要同时与dBase和BTrieve的数据源连接,必须分配两个连接
句柄。下一小节描述函数SQLAllocConnect.

SQLAllocConnect在henv标识的环境里为连接句柄分配内存。以下是
SQLAllocConnect的语法:
RETCODE SQLAllocConnect(henv,phdbc)
SQLAllocConnect 的参数如下表所示,其返回码是:
SQL-SUCCESS
SQL-SUCCESS-WITH-INFO
SQL-ERROR
SQL-INVALID-HANDLE
SQLSTATE的返回码是:
01000 S1000 S1001 S1009
利用核心函数与数据源连接

尽管有很多ODBC函数可以建立连接,但在核心API层却只有一种,即函数
SQLConnect。它提供简单、有效的方法与数据源的连接。所有驱动程序都支持
SQLConnect,所以它是最具有互用性的解决方案。下面是SQLConnect的描述。

SQLConnect加载一个数据库驱动程序,并建立一个与数据源的连接。该连接
句柄确定所有连接信息(包括它的状态,事务状态和错误信息)的存储位置。

SQLConnect的语法如下:
RETCODE SQLConnect(hdbc,szDSN,cbDSN,szUID,cbUID,szAuthStr,cbAuthAtr)

SQLConnectde的返回码是:
SQL-SUCCESS
SQL-SUCCESS-WITH-INFO
SQL-ERROR
SQL-INVALID-NUMBER


与数据源断开

应用系统一旦使用完成一个数据源连接,便应与之断开。连接是十分昂贵
的资源,因为很多DBMS对同时连接的每一个许可人员或用户都是收费的。当
连接完成时,应当把它返回,以便其它用户能注册进入该系统。下面描述的ODBC
函数SQLDisconnect处理这一操作过程。

SQLDisconnect关闭与指定的连接句柄相关的数据源连接。SQLDisconnect
的语法如下:
RETCODESQLDisconnect(hdbc)
SQLDisconnect的返回码是:
SQL-SUCCESS
SQL-SUCCESS-WITH-INFO
SQL-ERROR
SQL-INVALID-HANDLE

如果数据源连接成功的话,就可以继续下一步;
CString strSQLString;
RETCODE ReturnCode;
SQLHSTMThstmt;
if (SQL_SUCCESS != SQLAllocHandle(SQL_HANDLE_STMT,theApp.m_hdbc,&hstmt))
return;
strSQLString.Format(
"SELECT "
"NID,"
"ARIQI,"
"NJINE,"
"ASHUOMING,"
"ALAIYUAN,"
"ACUNZHE,"
"AYONGTU,"
"AXIAOFEI,"
"ABEIZHU"
" FROM HHZhiChu "
" WHERE NID=%u",
nID);
if (SQL_SUCCESS == (ReturnCode = SQLExecDirect(hstmt,(UCHAR*)((LPCTSTR)strSQLString),SQL_NTS)))
{
SQLBindCol(hstmt,1,SQL_C_SLONG,&dbdata.m_Nid,0,&cb);
SQLBindCol(hstmt,2,SQL_C_TIMESTAMP,&dbdata.m_Ariqi,0,&cb);
SQLBindCol(hstmt,3,SQL_C_DOUBLE,&dbdata.m_Njine,0,&cb);
SQLBindCol(hstmt,4,SQL_C_CHAR,dbdata.m_Ashuoming,HHZhiChu_aShuoMing_SIZE,&cb);
SQLBindCol(hstmt,5,SQL_C_CHAR,dbdata.m_Alaiyuan,HHZhiChu_aLaiYuan_SIZE,&cb);
SQLBindCol(hstmt,6,SQL_C_CHAR,dbdata.m_Acunzhe,HHZhiChu_aCunZhe_SIZE,&cb);
SQLBindCol(hstmt,7,SQL_C_CHAR,dbdata.m_Ayongtu,HHZhiChu_aYongTu_SIZE,&cb);
SQLBindCol(hstmt,8,SQL_C_CHAR,dbdata.m
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇用UDP协议实现广播通信 下一篇“八皇后”动态图形的实现

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: