C++builder5.0调用数据库可以采用ODBC,OLE-DB,ADO.SQLSERVER7.0提供了一系列的编程接口。利用此接口的优点是dll中不需要放置数据组件,充分利用sqlserver的驱动,同时在使用的客户端计算机上比较方便的连接到远程数据库上。 由于我对C++builder不是特别熟悉,作一个中间件的项目时,也是边开发边学习。错误之处请大家指正。我们一步一步的通过实例来学习。 打开C++builder5.0,新建一个DLL项目,按默认值即可。在头文件hos.h中加入以下语句. #ifdef _BUILDING_THE_DLL #define _EXPORT_TYPE _export #else #define _EXPORT_TYPE _import #endif #define MAX_LOGIN_TIME 5 // #define MAX_EXEC_TIME 10 PDBPROCESS dbproc; // The connection with SQL Server. char gl_dlmm_key1[]="000"; char gl_dlmm_key2[]="kle";
//定义内部函数 char *CheckConnect(void);//暂时不用
//导出函数 extern "C" __declspec(dllexport) int Hosp_Connect(char *pUid,char *pPwd); extern "C" __declspec(dllexport) int Hosp_DisConnect(void); 导出接口函数,其他的语言才能够调用 我们来看看hos.cpp文件: #define EVAL #include <vcl.h> #pragma hdrstop #define DBNTWIN32 //这是必须的 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> #include <windows.h> //在程序中用到的函数都在以下两个头文件中定义 #include <sqlfront.h> //sqlserver函数,包含在c++ builder中 #include <sqldb.h> //
#include "hos.h"
USERES("hos.res"); USELIB("ntwdblib.lib"); USELIB("hos.lib");
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { return 1; }
//连接数据库,参数为用户名和口令. int Hosp_Connect(char *pUid,char *pPwd) { int result; AnsiString asUser,asPass;
PLOGINREC login; // The login information. dbsetlogintime (MAX_EXEC_TIME); for(int i=0;i<2;i++) { dbinit (); login = dblogin (); #ifdef EVAL DBSETLUSER (login, "sa"); DBSETLPWD (login, ""); DBSETLAPP (login, "应用程序名"); dbproc = dbopen (login, "数据库服务器的IP地址"); #else asUser = AnsiString(pUid); if(i==0) asPass = AnsiString(pPwd) + AnsiString(gl_dlmm_key1); else asPass = AnsiString(pPwd) + AnsiString(gl_dlmm_key2); DBSETLUSER (login, asUser.c_str()); DBSETLPWD (login, asPass.c_str()); DBSETLAPP (login, "应用程序名"); dbproc = dbopen (login, "数据库服务器的IP地址"); #endif
if (dbproc != NULL) { result = 1; break; } else { result = 0; #ifdef EVAL break; #endif } } return result; }
int Hosp_DisConnect(void) { int result; dbexit (); result = 1; return result; } 未完待续,时间有些长了,我都忘记了,不好意思 
|