加载中…
个人资料
谢先斌
谢先斌
  • 博客等级:
  • 博客积分:0
  • 博客访问:392,635
  • 关注人气:201
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

MFC中如何用ADO连接SQL Server 2005

(2013-01-07 09:03:16)
标签:

mfc中如何用ado连接sq

adosqlserver

mfc连接数据库

mfc使用ado连接sqlser

ado数据库

分类: PowerBuilder解答

VC++ ADO连接数据库

第一步:(以下语句插入相应的文件中,ADOConn.h,可能代码中已经有了) 

#import"C:\Program Files\Common Files\System\ado\msado15.dll"no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")

第二步:

在工程中增加以下两个文件(ADOConn.h, ADOConn.ccp),增加方法如下,在FILEVIEW中的Source Files,点右键,选择添加文件到工程目录.选择ALL FILES,将以上两个文件选中.

文件可以自建,自建代码附后,也可以在网上下载.

 

以下是程序的关键的连接代码,我在测试过程中这部分的代码一定要写对.

服务器的IP地址:我们公司是192.168.3.4,数据库的名称,以下红色部分,填自己的信息

BOOL CADOConn::OnInitDBConnect()

 CString strConnection;

 

 strConnection "Provider=SQLOLEDB.1;Server=" theApp.m_strServerApp ";Database=DB_TestDatabase";

 // theApp.m_strServerApp:192.168.3.4

 ::CoInitialize(NULL);

 try

 {

  m_pConnection.CreateInstance(__uuidof(Connection));///////////////////////////////////////////////////////////////////////

#if !defined(AFX_ADOCONN1_H__E411A6A3_90BA_4C07_8BC5_5F48FFF4DB07__INCLUDED_)

#define AFX_ADOCONN1_H__E411A6A3_90BA_4C07_8BC5_5F48FFF4DB07__INCLUDED_

#include 

//#include 

//#include 

#if _MSC_VER 1000

#pragma once

#endif // _MSC_VER 1000

#include "sqlext.h"

#import "c:Program FilesCommon FilesSystemadomsado15.dll"no_namespace rename("EOF","adoEOF")rename("BOF","adoBOF")

class CADOConn 

...{

public:

    CADOConn();

    virtual ~CADOConn();

public:

    //ADODB::_ConnectionPtr   m_pConnect   

    //_ConnectionPtr m_pConnection;

    //_RecordsetPtr  m_pRecordset;

    

public:

    int FindRecordSet(CString m_sql,CString strField,CString str);

    int DeleteRecordSet(CString m_sql);

    //初始化——连接数据库

    static void OnInitDBConnect();

    //执行查询

    static _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);

    //Insetr Update _variant_t

    static BOOL ExecuteSQL(_bstr_t bstrSQL);

    void ExitConnect();

    //获得表长

    int GetRecordCount(CString strTable, int &nCount, CString strCondition _T(""));

    //sql语句,待查属性列,查询结果

    static int SelectRecordSet(CString m_sql,CString strField,CString &strResult);

    //修改属性值

    int UpdateRecordSet(CString m_sql, CString strField, CString str);

    int InsertRecord(CString strTable, int nCount, CString *strFields,    CString *strValue, 

        CString strkeyfield _T(""), CString strkey _T(""));

    

};

#endif // !defined(AFX_ADOCONN1_H__E411A6A3_90BA_4C07_8BC5_5F48FFF4DB07__INCLUDED_)

// ADOConn.cpp: implementation of the CADOConn class.

//

//////////////////////////////////////////////////////////////////////

#include "stdafx.h"

#include "MyClient.h"

#include "ADOConn.h"

//#include "ExamTest.h"

#ifdef _DEBUG

#undef THIS_FILE

static char THIS_FILE[]=__FILE__;

#define new DEBUG_NEW

#endif

_ConnectionPtr m_pConnection;

_RecordsetPtr  m_pRecordset;

extern CMyClientApp theApp;

////////////////////////////////////////////////////////////////////

// Construction/Destruction

//////////////////////////////////////////////////////////////////////

CADOConn::CADOConn()

...{

}

CADOConn::~CADOConn()

...{

}

void CADOConn::OnInitDBConnect()

...{    

    CString strUser;

    CString strPwd;

    CString strservername;

    CString strdbname;

    CString strConnection;

    

    strUser theApp.m_strDBUserApp;

    strPwd theApp.m_strDBPwdApp;

    strConnection "Provider=SQLOLEDB.1;Server=" theApp.m_strServerApp+ ";Database=TroubleCheck";

    

    ::CoInitialize(NULL);

    try

    ...{

        m_pConnection.CreateInstance(__uuidof(Connection));//******************

        _bstr_t strConnect (_bstr_t)strConnection;

    

        m_pConnection->Open(strConnect,(_bstr_t)strUser,(_bstr_t)strPwd,adModeUnknown);//****************

        theApp.isDBOK TRUE;

    }

    catch(_com_error e)

    ...{

        //AfxMessageBox(e.Description()+"系统退出!");

        //exit(0);//***********************************

        AfxMessageBox("数据库连接失败,请重新配置连接数据库!");

        ::SendMessage(theApp.hwndmainDlg,WM_SETDBSERVER,0,0);

    }

}

_RecordsetPtr& CADOConn::GetRecordSet(_bstr_t bstrSQL)

...{

    try

    ...{

        

        if (m_pConnection == NULL)

        ...{

            OnInitDBConnect();

        }

        

        m_pRecordset.CreateInstance(_uuidof(Recordset));

        m_pRecordset->Open(bstrSQL,(_variant_t)m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);

    }

    catch (_com_error e)

    ...{

        AfxMessageBox(e.Description()+"系统退出!");

        exit(0);

        //AfxMessageBox("2");

    }

    return m_pRecordset;

//     _variant_t var;

}

BOOL CADOConn::ExecuteSQL(_bstr_t bstrSQL)//************************

...{

    try

    ...{

        if (m_pConnection == NULL)

        ...{

            //AfxMessageBox("自动连接!");

            OnInitDBConnect();

        }

        m_pConnection->Execute(bstrSQL ,NULL,adCmdText);

    }

    catch (_com_error e)

    ...{

        AfxMessageBox(e.Description()+"系统退出!");

        exit(0);

    }

    return true;

}

void CADOConn::ExitConnect()

...{    

    if (m_pRecordset != NULL)

    ...{    

        m_pRecordset->Close();

        m_pConnection->Close();

        ::CoUninitialize();

    }

}

int CADOConn::SelectRecordSet(CString m_sql,CString strField,CString &strResult)

...{

    _variant_t    varTemp;

    _RecordsetPtr m_pRecord NULL;

    try

    ...{

        m_pRecord GetRecordSet((_bstr_t)m_sql);

        if (m_pRecord != NULL)

        ...{

            if (!m_pRecord->adoBOF)

            ...{

                m_pRecord->MoveFirst();

            }

            while(!m_pRecord->adoEOF)

            ...{

                varTemp m_pRecord->GetCollect((_bstr_t)strField);

                if (varTemp.vt == VT_NULL)

                ...{

                    strResult _T("");

                }

                strResult (LPCSTR)_bstr_t(varTemp);

                //strResult.TrimRight();

                m_pRecord->MoveNext();        

            }

        }

        else

            return 0;

    }

    catch (...) 

    ...{

        AfxMessageBox("读取失败,请检查数据库!");

        return 0;

    }

    return 1;

}

ADOConn.cpp

int CADOConn::UpdateRecordSet(CString m_sql, CString strField, CString str)

...{

    _variant_t    varTemp;

    _RecordsetPtr m_pRecord NULL;

    

    try

    ...{

        m_pRecord GetRecordSet((_bstr_t)m_sql);

        if (m_pRecord!=NULL)

        ...{

            if (!m_pRecord->adoBOF)

            ...{

                m_pRecord->MoveFirst();

            }

            while(!m_pRecord->adoEOF)

            ...{    

                m_pRecord->PutCollect((_bstr_t)strField,_variant_t(str));

                m_pRecord->Update();

                m_pRecord->MoveNext();        

            }

        }

    }

    catch (...) 

    ...{

        AfxMessageBox("读取失败,请检查数据库!");

        return 0;

    }

    return 1;

}

int CADOConn::FindRecordSet(CString m_sql, CString strField, CString str)

...{

    _variant_t    varTemp;

    _RecordsetPtr m_pRecord NULL;

    CString strTemp;

    

    try

    ...{

        m_pRecord GetRecordSet((_bstr_t)m_sql);

        if (m_pRecord!=NULL)

        ...{

            if (!m_pRecord->adoBOF)

            ...{

                m_pRecord->MoveFirst();

            }

            while(!m_pRecord->adoEOF)

            ...{    

                varTemp m_pRecord->GetCollect((_bstr_t)strField);

                if (varTemp.vt == VT_NULL)

                ...{

                    strTemp _T("");

                }

                strTemp (LPCSTR)_bstr_t(varTemp);

                strTemp.TrimRight();

                if (!strcmp(strTemp,str))

                    return 1;

                m_pRecord->MoveNext();        

            }

        }

    }

    catch (...) 

    ...{

        AfxMessageBox("读取失败,请检查数据库!");

        return 0;

    }

    return 1;

}

int CADOConn::DeleteRecordSet(CString m_sql)

...{

    if(!ExecuteSQL(_bstr_t(m_sql)))

    ...{

        return 0;

    }

    else

    ...{

        AfxMessageBox("删除成功");

        return 1;

    }

}

int CADOConn::GetRecordCount(CString strTable, int &nCount, CString strCondition)

...{

    _RecordsetPtr m_pRecord NULL;

    int nCounter 0;

    CString m_sql;

    m_sql "select from strTable strCondition;

    try

    ...{

        m_pRecord GetRecordSet((_bstr_t)m_sql);

        if (m_pRecord!=NULL)

        ...{

            if (!m_pRecord->adoBOF)

            ...{

                m_pRecord->MoveFirst();

            }

            while(!m_pRecord->adoEOF)

            ...{

                m_pRecord->MoveNext();

                nCounter++;

            }

        }

        nCount nCounter;

    }

    catch (...) 

    ...{

        AfxMessageBox("数据库错误");

        return 0;

    }

    return 1;

}

//return -1:主键冲突/////////////////注意m_Storedata=VT_NULL的情况,要做处理

//strTable:表名

//nCount:属性列数

//strFields:属性列名

//strValue:属性列值

//strKeyfield:主键名

//strKey:主键属性值

int CADOConn::InsertRecord(CString strTable, int nCount, CString *strFields,

                            CString *strValue,CString strKeyfield, CString strKey)

...{

    CString m_sql;

    _RecordsetPtr m_pRecord;

    _variant_t m_Storedata;

    try

    ...{

        if (strKeyfield != "")

        ...{

            m_sql "select from strTable;

            m_pRecord GetRecordSet((_bstr_t)m_sql);

            if (m_pRecord!=NULL)

            ...{

                if (!m_pRecord->adoBOF)

                ...{

                    m_pRecord->MoveFirst();

                }

                

                while (!m_pRecord->adoEOF)

                ...{

                    m_Storedata m_pRecord->GetCollect((_bstr_t)strKeyfield);

                    if ((LPCSTR)_bstr_t(m_Storedata)==strKey)

                    ...{

                        return 0;

                    }

                    m_pRecord->MoveNext();

                }

               

        }

        

        m_sql "insert into strTable (";

        for (int i=0; i

        ...{

            m_sql += strFields[i] ",";

        }

        m_sql += strFields[nCount-1] ") ";

        m_sql += "values (";

        for (i=0; i

        ...{

            m_sql += strValue[i] ",";

        }

        m_sql += strValue[nCount-1] ") ";

        

        ExecuteSQL((_bstr_t)m_sql);

    }

    catch (...) 

    ...{

        AfxMessageBox("数据库错误");

        return 0;

    }

    return 1;

}

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有