Chinaunix首页 | 论坛 | 博客
  • 博客访问: 465805
  • 博文数量: 724
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5010
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(724)

文章存档

2011年(1)

2008年(723)

我的朋友

分类:

2008-10-13 17:06:57

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 */
/************************************************************/

功能简介

  • 1.支持SQL语言的查询、删除及更新操作
  • 2.支持大容量数据的批量拷贝
  • 3.支持MS DTC分布式事务处理
  • 4.支持错误处理
  • 优点

  • 1.比其他任何一种访问方式要快(如ODBC、OLE DB、ADO)
  • 2.提供方便、简单、灵活的接口函数
  • 3.使用更方便,可以提高软件的开发效率
  • 缺点

  • 1.提供的方法尚不完善
  • 2.对于存储过程的支持尚不完善
  • 3.其它的未知错误可能存在
  •  
    --------------------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---------------------


    阅读(237) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~