标题:各位,本人写的数据库动态链接库,欢迎观赏
只看楼主
hlmzrdongdong
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
结帖率:100%
 问题点数:0 回复次数:9 
各位,本人写的数据库动态链接库,欢迎观赏
最近本人在做一个要和数据库交互的项目,其中有很多需要环节需要进行数据库操作,所以写了这个动态链接库,也就是DLL。
本人写的DLL是MFC规则DLL,可以在MFC程序中调用,非常的简便易用。
首先要说的是数据库参数的配置问题,这些参数包括数据库的类型、版本,如果安全权限则还需要设定密码和口令。故而在本DLL中设计了一个类似于普通MFC EXE程序的参数设定对话框,DBConfigDlg.h和DBConfigDlg.cpp。

一些关键代码为:
程序代码:
void CDBConfigDlg::OnApply() 
{
    // TODO: Add your control notification handler code here
    UpdateData(TRUE);
    if(BST_CHECKED==((CButton*)GetDlgItem(IDC_PASSWORDENABLE))->GetCheck())
    {
        GetDlgItem(IDC_USERID)->GetWindowText(UserID);
        GetDlgItem(IDC_PASSWORD)->GetWindowText(Password);    
    }
    IsApplyed=TRUE;
    OnOK();
}

void CDBConfigDlg::OnCancel() 
{
    // TODO: Add extra cleanup here
    IsApplyed=FALSE;
    CDialog::OnCancel();
}

void CDBConfigDlg::OnPasswordenable() 
{
    // TODO: Add your control notification handler code here
    if(BST_CHECKED==((CButton*)GetDlgItem(IDC_PASSWORDENABLE))->GetCheck())
    {
        GetDlgItem(IDC_USERID)->EnableWindow(TRUE);
        GetDlgItem(IDC_PASSWORD)->EnableWindow(TRUE);
    }
    else
    {
        GetDlgItem(IDC_USERID)->SetWindowText("");
        GetDlgItem(IDC_PASSWORD)->SetWindowText("");
        GetDlgItem(IDC_USERID)->EnableWindow(FALSE);
        GetDlgItem(IDC_PASSWORD)->EnableWindow(FALSE);
    }    
}


然后是数据库的连接函数,此函数在DLL中导出,用于各位调用。
程序代码:
//连接数据库
BOOL __stdcall ConnectDB(DBPARAM* DBParam,_ConnectionPtr pConn)
{
    try
    {
        CString connStr;
        switch(DBParam->DBVersion)
        {
            case 0://MS ACCESS2000
                connStr=_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=")+DBParam->DBPath+_T(";Persist Security Info=false");
                break;
            case 1://MS ACCESS2003
                connStr=_T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=")+DBParam->DBPath+_T(";Persist Security Info=false");
                break;
            case 2://MS ACCESS2007
                connStr="Provider=Microsoft.ACE.OLEDB.12.0;DataSource=";
                connStr+=DBParam->DBPath;
                break;
            case 3://MS SQL SEVER2000
                connStr="Provider=sqloledb;DataSource=";
                connStr+=DBParam->DBPath;
                break;
            case 4://Oracle
                connStr="Provider=OraOLEDB.Oracle;DataSource=";
                connStr+=DBParam->DBPath;
                break;
            default://MS ACCESS2000
                connStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=";
                connStr+=DBParam->DBPath;
                break;
        }
        _bstr_t Connection=connStr;
        if(DBParam->IsPasswordEnabled)//带密码的访问
            pConn->Open(Connection,(LPCTSTR)(DBParam->UserID),(LPCTSTR)(DBParam->Password),adConnectUnspecified);
        else//不带密码的访问
            pConn->Open(Connection,"","",adConnectUnspecified);    
    }
    catch (_com_error e)
    {
        return FALSE;
    }
    return TRUE;
}

然后是SQL语句的执行函数
程序代码:
BOOL __stdcall CheckRecordSet(CString SQLCommand,_ConnectionPtr pConn,_RecordsetPtr pRecordset)
{
    try
    {
        pRecordset->Open(_variant_t(SQLCommand.GetBuffer(SQLCommand.GetLength())),_variant_t(pConn,true),adOpenStatic,adLockOptimistic,adCmdText);
    }
    catch(_com_error e)
    {
        return FALSE;
    }
    return TRUE;
}


当然对于DLL来说,接口函数的导出至关重要,这里也把接口函数的导出代码贴出来。
程序代码:
#include "stdafx.h"

struct DBPARAM
{
    BOOL IsPasswordEnabled;
    int DBVersion;
    CString Password;
    CString UserID;
    CString DBPath;
};

extern "C"  __declspec(dllexport) BOOL __stdcall SetDBParams(DBPARAM* DBParam);
extern "C"  __declspec(dllexport) BOOL __stdcall ConnectDB(DBPARAM* DBParam,_ConnectionPtr pConn);
extern "C"  __declspec(dllexport) BOOL __stdcall CheckRecordSet(CString SQLCommand,_ConnectionPtr pConn,_RecordsetPtr pRecordset);


最后自己写了一个测试程序,用于测试该DLL,运行效果如图:


需要程序代码的,发E-mail至worm.msblast@
搜索更多相关主题的帖子: 动态 color 对话框 数据库操作 
2012-09-30 20:02
wyl_lsz
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2012-9-30
得分:0 
哥哥加油!!好厉害噢~~
2012-09-30 22:46
cendi229
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2008-10-11
得分:0 
大哥能不能把所有源代码发一份给我,我初学,看不懂啊…… cendi229@ 谢谢啊!
2012-10-20 01:38
转身陌路
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-21
得分:0 
好高端
弱弱的问下,测试程序怎么编写,初学者
2012-10-21 13:50
hlmzrdongdong
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
得分:0 
回复 4楼 转身陌路
这个很简单的啊,就跟正常引用DLL一样。

京畿明月
2012-10-21 14:47
转身陌路
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-10-21
得分:0 
回复 5楼 hlmzrdongdong
初学者,有点不懂得呀
2012-10-21 15:16
小小小火柴
Rank: 5Rank: 5
来 自:江西赣州
等 级:职业侠客
威 望:3
帖 子:141
专家分:337
注 册:2012-9-28
得分:0 
  碉堡了!!!!!!!!

   好好学习!
2012-10-21 21:59
flashmouse
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-1-31
得分:0 
正需要的,好东东! 楼主,赐我一份吧,多谢!
2013-01-31 10:32
tfnsuhqk
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2014-1-20
得分:0 
大哥能不能把所有源代码发一份给我,我初学,看不懂啊……  285515535@谢谢啊!
2014-02-07 10:03
ztao91
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-1-20
得分:0 
吊,至今还不会用MFC链接数据库,哎、、
2015-01-20 19:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-382386-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.495199 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved