- 积分
- 3266
- 明经币
- 个
- 注册时间
- 2002-7-5
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2004-3-30 12:30:00
|
显示全部楼层
To sophie_wzh:关系型数据库服务器Oracle和SQL Server
确实,我早看到了你的帖子,但你的问题提得太大,回复起来,给我的感觉象是老虎吃天,无从下口。我不知道你对MFC的ODBC数据库API熟悉程度,若要从头开始讲解,即使你很熟悉C++编程,ODBC API也可以写满整整一本书。我本来准备为你用ObjectARX编写一个完整的(当然是仅具有简单功能的)与AutoCAD相关的数据库应用程序例子,这需要比较长的时间。既然你急于获取有关信息,我只有停止例程的编写。以下我将这个例程的思路大致叙述一下,同时简单回答你的问题。首先,MFC并未封装ADO数据库接口,置顶帖子中有关于ADO编程的例子,修改其中的连接字符串(ConnectionString)就可以与通过ODBC建立与Oracle数据库的连接。我认为你想要使用MFC封装的ODBC API接口。这样,首先你要准备好ODBC数据源(在“控制面板”中配置ODBC数据源,这个应该不需要多讲吧)。至于ODBC编程,在这也没办法作深入细致的介绍,以下结合一段最简单的代码作个入门介绍:- #include <SQL.h> //ODBC API编程必须包含的文件
- #include <SQLEXT.h>void odbcSample()
- {
- RETCODE rcd; //SQL函数返回信息
- HENV henv; //ODBC环境句柄
- HDBC hdbc; //ODBC数据连接句柄
- HSTMT hstmt; //ODBC SQL语句句柄
- char recieve[50]; //该变量存放SQL语句返回数据
- SDWORD sDataLen; //SQL返回的数据长度
- unsigned char conStr[256]; //SQL语句输出字符串 CString YourDSN; //数据源名称
- CString YourSQL; //要使用的SQL语句 rcd = ::SQLAllocEnv(&henv); //第一步,分配数据环境句柄
- if(rcd == SQL_SUCCESS)
- if(::SQLAllocConnect(henv,&hdbc) == SQL_SUCCESS) //2、分配ODBC连接句柄
- if(::SQLDriverConnect(hdbc,0,(unsigned char*)YourDSN,
- SQL_NTS,conStr,256,NULL,SQL_DRIVE_NOPROMPT) == SQL_SUCCESS)//3、建立ODBC连接
- if(::SQLAllocStmt(hdbc,&hstmt) == SQL_SUCCESS)//4、分配SQL语句句柄
- if(::SQLExecDirect(hstmt,(unsigned char *)
- YourSQL,SQL_NTS) //5、执行SQL命令
- for(rcd=::SQLFetch(hstmt);rcd==SQL_SUCCESS;rcd=::SQLFetch(hstmt))//6、使用循环,获取SQL语句执行结果
- {
- ::SQLGetData(hstmt,1,SQL_C_CHAR,recieve,50,&sDataLen);//7、保存SQL返回结果
- }
- ::SQLFreeStmt(hstmt); //以下释放SQL资源
- ::SQLDisconnect(hdbc);
- ::SQLFreeConnect(hdbc);
- ::SQLFreeEnv(henv);
- }
复制代码 通过设计复杂的SQL语句,可以完成建立数据表,查询、编辑数据等功能,当然要实现更为复杂的功能,可能还需要利用CDatabase和CRecordset等对象。以上是ODBC API编程方法,由于它不支持非关系型数据库和面向对象技术,通常不建议在新的主流代码中使用,好的数据库应用程序尽量使用OLE DB技术。OLE DB是建立在ODBC之上,又扩展了ODBC的功能的OLE编程接口,它与ODBC编程有很大的区别,OLE DB广泛地使用COM和COM接口。掌握C++的数据库访问技术后,在AutoCAD ObjectARX编程中,可以使用ASE(AutoCAD SQL Extended)数据交换技术在DWG图形文件中方便地完成与数据库之间的数据交换。关于在ARX中使用OLE DB数据库编程技术和ASE数据交换技术,由于内容太多,希望以后有时间另外写文章介绍。最后,如何用C++代码建立新的空白Oracle或SQL Server数据库,我没有做过(每次都是手工建立数据库,然后用代码进行数据库操作),不敢妄言。
|
|