ADO 连接sql server

注意

下面的sql server数据库连接方式,性能从低到高
1.DSN
   strConnect = "DSN=mng;DRIVER={SQL Server};DATABASE=msdb;";
2.DSN-less
   strConnect = "driver={SQL Server};Server=125.44.5.22;Database=eett;uid=sa;pwd=sa";
3.OLE DB
   strConnect = "Provider=SQLOLEDB;Server=125.44.5.22;Database=eett;uid=sa;pwd=sa";

 

2.stdafx.h中添加

   #import "C:\Program Files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

3.一个sql连接类

           1)CSqlServer.h文件

#pragma once

class CSqlServer
{
public:
 CSqlServer(void);
public:
 ~CSqlServer(void);

public:
 bool Open();
 void Close();
 bool Execute(char* commandText, _RecordsetPtr& recordsetPtr=(_RecordsetPtr)NULL);
 bool Execute(CString strCommandText, _RecordsetPtr& recordsetPtr=(_RecordsetPtr)NULL);

 void WriteConnectInfo();
 void ReadConnectInfo();
public:
 _ConnectionPtr m_pConnection;

 CString m_strProvider;
 CString m_strServer;
 CString m_strDatabase;
 CString m_strUid;
 CString m_strPwd;
};

2)CSqlServer.cpp文件

#include "StdAfx.h"
#include "SqlServer.h"

CSqlServer::CSqlServer(void)
{
 ::CoInitialize(NULL);
}

CSqlServer::~CSqlServer(void)
{
 ::CoUninitialize();
}

bool CSqlServer::Open()
{
 ReadConnectInfo();
 CString strConnect = "Provider=" + m_strProvider +
      ";Server=" + m_strServer +
      ";Database=" + m_strDatabase +
      ";uid=" + m_strUid +
      ";pwd=" + m_strPwd;

 try{
  //创建Connection 对象
  if (FAILED(m_pConnection.CreateInstance("ADODB.Connection")))
   return false;

  // 开始连接
  if(FAILED(m_pConnection->Open(_bstr_t(strConnect),"","",adModeUnknown)))
  {
   m_pConnection.Release();
   return false;
  }
 }
 catch(_com_error e)
 {
  return false;
 }

 return true;
}

void CSqlServer::Close()
{
 //不能多次关闭,否则会出现错误
 if(m_pConnection->State)
  m_pConnection->Close();
}

bool CSqlServer::Execute(char* commandText, _RecordsetPtr& recordsetPtr)
{
 return Execute(CString(commandText), recordsetPtr);
}

bool CSqlServer::Execute(CString strCommandText, _RecordsetPtr& recordsetPtr)
{
 if (strCommandText.IsEmpty())
  return false;

 try
 {
  COleVariant vtOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
  recordsetPtr = m_pConnection->Execute(_bstr_t(strCommandText),&vtOptional,-1);
 }
 catch (_com_error e)
 {
  return false;
 }

 return true;
}

void CSqlServer::WriteConnectInfo()
{
 ::WritePrivateProfileString("ConnectInfo", "Provider", m_strProvider, ".\\SqlServerConnect.ini");
 ::WritePrivateProfileString("ConnectInfo", "Server",   m_strServer,   ".\\SqlServerConnect.ini");
 ::WritePrivateProfileString("ConnectInfo", "Database", m_strDatabase, ".\\SqlServerConnect.ini");
 ::WritePrivateProfileString("ConnectInfo", "uid",      m_strUid,      ".\\SqlServerConnect.ini");
 ::WritePrivateProfileString("ConnectInfo", "pwd",      m_strPwd,      ".\\SqlServerConnect.ini");
}

void CSqlServer::ReadConnectInfo()
{
 char cInfo[20];

 ::GetPrivateProfileString("ConnectInfo", "Provider", "", cInfo, 20, ".\\SqlServerConnect.ini");
 m_strProvider = CString(cInfo);

 ::GetPrivateProfileString("ConnectInfo", "Server",   "", cInfo, 20, ".\\SqlServerConnect.ini");
 m_strServer = CString(cInfo);

 ::GetPrivateProfileString("ConnectInfo", "Database", "", cInfo, 20, ".\\SqlServerConnect.ini");
 m_strDatabase = CString(cInfo);

 ::GetPrivateProfileString("ConnectInfo", "uid",      "", cInfo, 20, ".\\SqlServerConnect.ini");
 m_strUid = CString(cInfo);

 ::GetPrivateProfileString("ConnectInfo", "pwd",      "", cInfo, 20, ".\\SqlServerConnect.ini");
 m_strPwd = CString(cInfo);
}

 

3)SqlServerConnect.ini文件

[ConnectInfo]
Provider=SQLOLEDB
Server=125.44.5.22
Database=eett
uid=sa
pwd=sa

4)测试

CString sqlCommand = "select * from eee";
 _RecordsetPtr recordsetPtr;
 if (m_sqlServer.Execute(sqlCommand, recordsetPtr))
  MessageBox("执行成功");
 else
 {
  MessageBox("执行失败");
  return;
 }

 while (!recordsetPtr->GetadoEOF())
 {
    _variant_t  _eee;
    _eee = recordsetPtr->GetCollect ("eee");

   char* tt;

    if (_eee.vt == VT_NULL)
      return false;
    else
    {

       _bstr_t str_eee = _eee;

       tt= str_eee;
    }

 

  //  没有做判断处理的操作

  // int sss = recordsetPtr->GetCollect ("sss");


  recordsetPtr->MoveNext();
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值