分类:
2008-10-13 16:48:17
VC++中使用 DB-Library 编程(SQL Server)
作者:
最近刚学VC++,觉得VC++在访问数据库时不论使用ODBC、ADO,OLE
DB或MFC相应类库都感觉有些繁琐,于是并利用VC++将SQL Server提供的DB-Library库作了一些简单的封装,以方便访问MS
SQL Server数据库。SQL Server提供的DB-Library库有多个版本,我用的是WIN32平台下的NTWDBLIB.LIB库,这些库和相应的头文件(SQLFRONT.H与SQLDB.H)必须是在安装SQL
Server时使用自定义方式选择安装,否则程序无法通过.以下是相应的类图,如[图一]:
如图一所示,CDBSession和DBLibrary类都从DBErr继承而来,在DBErr类中处理所有的错误信息,CDBSession类主要实现连接服务器并设置数据库,DBLibrary类主要完成对数据库中表的操作,提供的方法请看.(解包后有两个文件:physic_manager(DEMO).sql为创建演示库的脚本,修改相应数据库文件存放路径即可.PhManage.rar为源程序文件包,已在win2000server上调式通过,注:在使用之前,请安装SQL Server的客户端开发工具[使用自定义安装并选择"开发工具"下的"头和库"])
/***************************DBLibrary************************/ /* Version 1.0(测试版) */ /* 作者:张尧伟 */ /* 编写日期:2003-10-20 */ /* 第一个测试版完成日期:2003-12-01 */ /************************************************************/
功能简介:
优点:
缺点:
--------------------next---------------------
呵,mojian0314兄弟的问题,在他给我的E-MAIL中已经解决,要是出现同样问题的兄弟,给我发E-MAIL:ynzhangyao@sina.com;ynzhangyao@hotmail.com;ynzhangyao@163.com ( ynzhangyao 发表于 2005-9-22 17:22:00)
void CTestDlg::OnOK()
{
char ver[15];
CString cc;
for(int i=0;;i++)
{
OnTest();//我想多次读数据库,结果出现////格式化SQL语句错误
}
getVerInfo(ver);
AfxMessageBox(ver);
// CDialog::OnOK();
}
而用你第一个版本就没问题
但我想连两个数据库就不成
try{
if(!DBSession.Connect("sa","123","127.0.0.1"))
return FALSE;
DBSession.SetDataBase("wss");
if(!DBSession111.Connect("sa","123","127.0.0.1"))
return FALSE;
DBSession.SetDataBase("wddd");
}
catch(DBErr *dberr)
{
char *err;
int errcode;
dberr->GetLastErr(errcode,&err);
AfxMessageBox(err);
} ( lovelzf 发表于 2005-8-11 15:34:00)
接上:还有服务器IP用的是本地的IP:192.168.1.3 ( lm816 发表于 2005-5-19 20:30:00)
小弟我在调试时,程序运行到以下代码就停掉了,
bool CDBSession::Connect(char *UserName,char *Password,char *SrvName)
{
dbmsghandle((DBMSGHANDLE_PROC)Msg_Handle);
DBLVer=dbinit();
WriteLog(false,"%s",DBLVer);
login=dblogin();
DBSETLUSER(login,UserName);
DBSETLPWD(login,Password);
DBSETLAPP(login,app_name);
BCP_SETL(login,TRUE);//设置批拷贝
dbsetmaxprocs(MAXPROCS);
for(int i=0;i
dbproc[i]=dbopen(login,SrvName);//程序在此语句就运行不下去了,可以保证服务器的UserName、Password全都正确,不知道为什么运行不了?请各位大哥能指点小弟一下,谢谢!
.......... ( lm816 发表于 2005-5-19 20:29:00)
我用所提供的类库时候,遇到这样的问题:在一个循环中,执行对MSSQL的操作的时候,只能在循环的第一遍执行成功。还有connect()函数中,连接数用宏表达十不能够连接成功。而只有改成数字才能成功。还有就是对一些参数没有进行初始化,运行过程中引起错误。这些我不知道是为什么? ( mojian0314 发表于 2004-9-2 16:59:00)
请问这么好的东西在哪里下载呀? ( xyz168 发表于 2004-7-7 21:55:00)
目前正在准备编写通过OCI访问Oracle数据库,
OCI比DBLIB复杂很多......正在进行中 ( ynzhangyao 发表于 2004-7-1 15:08:00)
如果大家在使用中发现BUG或什么问题,请指正,我的
E-Mail:ynzhangyao@sina.com.cn ( ynzhangyao 发表于 2004-7-1 14:58:00)
解决!!!!
3.修改程序数据库的ip地址
首先,开始-〉运行-〉cmd[打开dos]-〉输入‘ipconfig'察看本机ip
然后修改PhysicM.cpp文件中的
BOOL CPhysicMApp::InitInstance()
{
if(!AfxInitRichEdit()) return FALSE;
try{
if(!DBSession.Connect("sa","","192.168.8.10")) return FALSE;
#ifdef _DEBUG
DBSession.SetDataBase("Demo");
#else
DBSession.SetDataBase("physic");
#endif
......
将其中的Connect("sa","","192.168.8.10")欲连接的数据库三个参数分别是:用户名,密码,ip地址。
4.打开工程文件PhManage.dsw
运行程序!
( hanxin 发表于 2004-7-1 10:33:00)
我也遇到和 hanxin 一样的问题, 里面的dbopen()没有返回值,不知道该怎么解决 ( ylxiao 发表于 2004-6-30 16:20:00)
.......................................................
--------------------next---------------------