VC与数据库SQL的链接

一、ADO简介
ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,请不必为此担心,即使你对OLE DB

,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。本文将详细地介绍在VC
下如何使用ADO来进行数据库应用程序开发,并给出示例代码。
本文示例代码
二、基本流程
万事开头难,任何一种新技术对于初学者来说最重要的还是“入门”,掌握其要点。让我们来看看ADO数据库开发的基本流程吧!
(1)初始化COM库,引入ADO库定义文件
(2)用Connection对象连接数据库
(3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。
(4)使用完毕后关闭连接释放对象。

1COM库的初始化
我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码:
BOOL CADOTest1App::InitInstance()
{
AfxOleInit();
}
2.用#import指令引入ADO类型库
我们在stdafx.h中加入如下语句:(stdafx.h这个文件哪里可以找到?你可以在FileView中的Header Files里找到)
#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF")
这一语句有何作用呢?其最终作用同我们熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。
几点说明:
(1) 您的环境中msado15.dll不一定在这个目录下,请按实际情况修改
(2) 在编译的时候肯能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告。
msado15.tlh(405) : warning C4146: unary minus operator applied to unsigned type, result still unsigned
CAdoConnection类的定义
class CAdoConnection
{
public:
   CAdoConnection();
   virtual ~CAdoConnection();
   void OnInitADOConn();//连接数据库
   BOOL ExecuteSQL(_bstr_t bstrSQL);//执行Insert UpDate Delete
   _RecordsetPtr & GetRecordSet(_bstr_t bstrSQL);//执行查询
private:
   _ConnectionPtr m_pConnection;//添加一个指向Connection对象的指针
   _RecordsetPtr m_pRecordset;//添加一个指向RecordSet对象的指针
};
//类的实现

CAdoConnection::CAdoConnection()
{
    ::CoInitialize(NULL);    //初始化OLE/COM库环境
}
CAdoConnection::~CAdoConnection()
{
   //关闭记录集和连接
    if(m_pRecordset != NULL)
        m_pRecordset->Close();
    m_pConnection->Close();
    ::CoUninitialize();    //释放程序占用的COM资源
}
void CAdoConnection::OnInitADOConn()// 连接数据库
{
try
{
        m_pConnection.CreateInstance("ADODB.Connection");//创建Connection 对象
        _bstr_t strConnect = "driver={SQL Server};Server=(local);DATABASE=数据库名称;UID=sa;PWD=你的sa登陆密码;";                    
        m_pConnection->Open(strConnect,"","",adModeUnknown);
   }
   catch(_com_error e)
   {
        AfxMessageBox(e.Description());//显示错误信息
   }
}
BOOL CAdoConnection::ExecuteSQL(_bstr_t bstrSQL)//执行Insert UpDate
{
    try
    {
       //是否已经连接到数据库
       if(m_pConnection == NULL)
            OnInitADOConn();
       m_pConnection->Execute(bstrSQL,NULL,adCmdText);
       return true;
     }
     catch(_com_error e)
     {
          AfxMessageBox(e.Description());
          return false;
     }
}

_RecordsetPtr& CAdoConnection::GetRecordSet(_bstr_t bstrSQL)//执行查询
{
     try
     {
        //连接数据库 如果Connection对象为空则重新连接数据库
        if(m_pConnection==NULL)
              OnInitADOConn();
        //创建记录集对象
        m_pRecordset.CreateInstance(__uuidof(Recordset));
        //取得表中的记录
        m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockBatchOptimistic,adCmdText);
}
     catch (_com_error e)
     {
         //异常 显示错误信息
         AfxMessageBox(e.Description());
      }
     return m_pRecordset;
}

需要用连接数据库的时候直接定义一个对象即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为一个AI语言模型,我无法连接SQL Server数据库。但我可以告诉你连接SQL Server数据库的一般步骤: 1. 确保已安装SQL Server驱动程序。 2. 在VC++项目中添加Microsoft的ActiveX Data Objects(ADO)库。 3. 在代码中定义一个Connection对象,然后使用其Open方法连接SQL Server数据库。 4. 使用Recordset对象中的方法和属性执行SQL操作。 以下是一个示例程序: ``` #include <iostream> #include <windows.h> #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "EndOfFile") using namespace std; int main() { HRESULT hr = CoInitialize(NULL); if (SUCCEEDED(hr)) { _ConnectionPtr pConn = NULL; _RecordsetPtr pRs = NULL; try { hr = pConn.CreateInstance(__uuidof(Connection)); if (SUCCEEDED(hr)) { pConn->Open("Provider=SQLOLEDB; Data Source=server_name; Initial Catalog=database_name; User ID=username; Password=password", "", "", adConnectUnspecified); if (pConn->State == adStateOpen) { hr = pRs.CreateInstance(__uuidof(Recordset)); if (SUCCEEDED(hr)) { pRs->CursorLocation = adUseClient; pRs->Open("SELECT * FROM table_name", pConn.GetInterfacePtr(), adOpenStatic, adLockOptimistic, adCmdText); while (!pRs->EndOfFile) { cout << (char*)(_bstr_t)pRs->Fields->GetItem("column_name")->Value << endl; pRs->MoveNext(); } } } } } catch (_com_error& e) { cout << "Error: " << e.ErrorMessage() << endl; } if (pConn != NULL && pConn->State == adStateOpen) { pConn->Close(); } CoUninitialize(); } return 0; } ``` 请注意,这只是一个示例程序,并且连接字符串和SQL查询应根据您的实际情况进行更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值