网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > C语言代码 > 正文

VC++联接数据库SQL2000应用实例及登陆退出(较全)

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务

*/ --------------------------------------------------------------------------------------
*/ 出自: 编程中国  http://www.bccn.net
*/ 作者: 赵博闻        
*/ 时间: 2007-10-29  编程论坛首发
*/ 声明: 尊重作者劳动,转载请保留本段文字
*/ --------------------------------------------------------------------------------------


我自己做了个用SQL2000联接的例子,请大家帮我看看,有什么不足还望指教。如能得到您的点滴指点
都将万分感谢。

这个例子现在只能操作一张表,要想操作整个库也不难,就是改SQL语句,然后配好数据库,建议使用存储过程

正文:

简易数据库系统

第一部分:用ADO连接SQL Server 2000
1 在STDafx.h中加入动态连接库msado15.dll,并重命名EOF为adoEOF,加在该文件后面(蓝色#endif后面,要是编译时有错误说明位置不对)
#import "D:\Program Files\Common Files\System\ado\msado15.dll"\
    no_namespace rename("EOF","adoEOF")
2 在App类中定义连接字符串。我的是CADOApp,文件是ADO.h
_ConnectionPtr m_pConnection;
3 在数据操作类InitInstance()中初始化COM类库
//这就是初始化COM库
    //应用程序主类的InitInstance成员函数里初始化OLE/COM库环境
    if (!AfxOleInit()) {
        AfxMessageBox("OLE/COM初始化失败");
        return FALSE;
    }

    theApp.m_pConnection.CreateInstance(__uuidof(Connection));
要在其它操作前面初始化,我的是dlg,原来在它后面初始化的结果走不到那一步,所以m_pConnection总是为NULL/0x000000000
4 再要操作的地方初始化结果集和连接字符串,我的是在一个按钮里
void CADOAccessDlg::OnBtnExec()
{
m_pRecordset.CreateInstance(__uuidof(Recordset));
CString strLink;//连接字符串
        try
        {        strLink.Format("Provider=SQLOLEDB;server=ZHAOPENG;UID=sa;PWD=sa;database=MD200");
            theApp.m_pConnection->Open((_bstr_t)strLink,"","",NULL);
        }
        catch(_com_error e)
        {
            AfxMessageBox("连接SQL Server失败!");
            return;
        }
        //UpdateData(true);
theApp.m_pConnection->Close();
}
如果要在文件中使用theApp,不要忘记在文件头部(不是头文件)加上extern CADOAccessApp theApp
以上就是连接数据库的简单方法。
第二部分:向ListCtrl中添加数据库中表的数据
1先写两个方法用于添加表头,和内容,ListCtrl要用Report格式
//初始化列表框
void CADOAccessDlg::InitReport()
{
    m_List.InsertColumn(0,_T("音乐名称"),LVCFMT_LEFT,120,-1);
    m_List.InsertColumn(1,_T("作者/歌手"),LVCFMT_LEFT,90,-1);
    m_List.InsertColumn(2,_T("备注"),LVCFMT_LEFT,110,-1);
    m_List.SetExtendedStyle(LVS_EX_FULLROWSELECT |LVS_EX_GRIDLINES);
}
//显示列表框里的内容,从MidoSond表中
void CADOAccessDlg::UpdataReport()
{
    m_List.DeleteAllItems();
    //查询
    m_pRecordset.CreateInstance(__uuidof(Recordset));
    CString strLink;
    try
    {
        strLink.Format("Provider=SQLOLEDB;server=ZHAOPENG;UID=sa;PWD=sa;database=MidoText");
        theApp.m_pConnection->Open((_bstr_t)strLink,"","",NULL);
    }
    catch(_com_error e)
    {
        AfxMessageBox("连接SQL Server失败!");
        return;
    }
    UpdateData(true);
    try
    {
        m_pRecordset->Open("select * from TextSond",theApp.m_pConnection.GetInterfacePtr(),
            adOpenDynamic,//动态
            adLockOptimistic,//乐观封锁法
            adCmdText);//文本查询
    }
    catch (_com_error e)
    {
        CString strErr="Select语句执行失败!";
        AfxMessageBox(e.ErrorMessage()+strErr);
    }
    _variant_t vat;
    CString MusicName,ZhuoZhe,SomethingAbout;
    CString strDomainName;
    while (!m_pRecordset->adoEOF)
    {//获取一个字段
        vat = m_pRecordset->GetCollect("音乐名称");
        if (vat.vt != VT_NULL) {
            MusicName = (LPCSTR)_bstr_t(vat);
            MusicName.TrimLeft();//清除左边的空格
        }
        vat = m_pRecordset->GetCollect("作者/歌手");
        if (vat.vt != VT_NULL) {
            ZhuoZhe = (LPCSTR)_bstr_t(vat);
            ZhuoZhe.TrimLeft();
        }
        vat = m_pRecordset->GetCollect("备注");
        if (vat.vt != VT_NULL) {
            SomethingAbout = (LPCSTR)_bstr_t(vat);
            SomethingAbout.TrimLeft();
        }
        int pos,id=1;
        pos = m_List.InsertItem(id,strDomainName);
        m_List.SetItemText(pos,0,MusicName);
        m_List.SetItemText(pos,1,ZhuoZhe);
        m_List.SetItemText(pos,2,SomethingAbout);
        m_pRecordset->MoveNext();
    }
    m_pRecordset->Close();
    theApp.m_pConnection->Close();
}
2在ShowWindow事件中调用,因为该事件先于其它任何事件所以在这一个就建立了数据库连接(连接写在第二个方法里)
void CADOAccessDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
    CDialog::OnShowWindow(bShow, nStatus);
    
    // TODO: Add your message handler code here
    this->InitReport();
    this->UpdataReport();
}
第三部分:添加,修改,删除
这三项功能看似简单实则重要,使操作数据库系统的核心操作,可以扩展出许多其他功能。
分析:三项功能的本质在于1检索输入设备中输入的数据合法性,将其保存到相应的变量中。2调用命令函数,对连接的数据库进行操作。3将操作结果返回到输出设备上。
我们就按照这样的思想编成,以添加功能为例说明其它给出代码
//1检索输入设备中输入的数据合法性,将其保存到相应的变量中
void CADOAccessDlg::OnBtnAdd()
{
    //判断是否有字符输入    
    if (ISEmpty()) {
        return;
    }
    //不可以出现前两项一样的输入(正则表达式)
    if (ISHaveString()==false) {
        return;
    }
//得到所输入的字符
    BOOL IsUpdata = FALSE;
    DataTable = "TextSond";//数据表名字
//这里我原来想作动态建库的所遗留了变量
    CString strWeather;
    CString strMusicName,strMen,strSomething;
    ((CEdit*)GetDlgItem(IDC_EdtMusicName))->GetWindowText(strMusicName);
    ((CEdit*)GetDlgItem(IDC_EdtZZName)

  • 下一篇资讯: vc++程序-旋转的风车
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师