标题:各位,本人写的数据库动态链接库,欢迎观赏
取消只看楼主
hlmzrdongdong
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
结帖率:100%
 问题点数:0 回复次数:1 
各位,本人写的数据库动态链接库,欢迎观赏
最近本人在做一个要和数据库交互的项目,其中有很多需要环节需要进行数据库操作,所以写了这个动态链接库,也就是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
hlmzrdongdong
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖北武汉
等 级:版主
威 望:1
帖 子:99
专家分:145
注 册:2008-10-24
得分:0 
回复 4楼 转身陌路
这个很简单的啊,就跟正常引用DLL一样。

京畿明月
2012-10-21 14:47



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




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

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