设为首页 收藏本站
查看: 1701|回复: 0

[经验分享] VC++使用ADO连接SQL Server数据库

[复制链接]

尚未签到

发表于 2015-6-30 14:42:18 | 显示全部楼层 |阅读模式
  基本步骤:
  1.创建一个基于对话框的应用程序ADODatabase。
  2.创建一个用来连接的ADO类库。系统菜单中Insert->New Class项,class type选择Generic Class; 在Name后输入类名“ADOConn”,点OK。这样,在工程上自动生成ADOConn.h和ADOConn.cpp两个文件。
  3.在ADOConn.h中导入一个ADO动态链接库msado15.dll,添加代码:#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF"),同时在ADOConn.h中定义 public://添加一个指向Connection对象的指针: _ConnectionPtr m_pConnection; //添加一个指向Recordset对象的指针: _RecordsetPtr m_pRecordset。
  4.m_pConnection->Open(_bstr_t ConnectionString, _bstr_t UserID, _bstr_t Password, long Options) 操作。ConnectionString为VC++中对SQL SERVER中ADO设置。如,Provider=SQLOLEDB;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=suntest;Data Source=WWW-ED1F301E78B ;User Id=sa;Password=;
  其中Data Source为服务器名称,可以用Server代替,本机表示为.或者(local);Initial Catalog为你要使用的数据库名称 可以用Database代替;Integrated Security=SSPI表示用集成模式,此时uid 和pwd 设置不起作用;只有当Integrated Security=FALSE表示用混合模式,uid 和pwd 设置才起作用
  参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名 adCmdProc-存储过程;adCmdUnknown-未知
  5.添加两个成员函数:(1)执行查询函数 _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);(2)执行SQL语句 BOOL ExecuteSQL(_bstr_t bstrSQL)。
  给出两个文件的完整代码:
  /*------------------ADOConn.h File-------------------------------------------------*/
  // ADOConn.h: interface for the ADOConn class.
  #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")
  #if !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)
  #define AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_
  #if _MSC_VER > 1000
  #pragma once
  #endif // _MSC_VER > 1000
  class ADOConn
  {
  // 定义变量
  public:
  //添加一个指向Connection对象的指针:
  _ConnectionPtr m_pConnection;
  //添加一个指向Recordset对象的指针:
  _RecordsetPtr m_pRecordset;
  // 定义方法
  public:
  ADOConn();
  virtual ~ADOConn();
  // 初始化—连接数据库
  void OnInitADOConn();
  // 执行查询
  _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL);
  // 执行SQL语句,Insert Update _variant_t
  BOOL ExecuteSQL(_bstr_t bstrSQL);
  void ExitConnect();
  };
  #endif // !defined(AFX_ADOCONN_H__AC448F02_AF26_45E4_9B2D_D7ECB8FFCFB9__INCLUDED_)
  /*--------------------------------------------------------------------------------*/
  /*---------------------ADOConn.cpp File---------------------------*/
  #include "stdafx.h"
  #include "ADOConn.h"
  #ifdef _DEBUG
  #undef THIS_FILE
  static char THIS_FILE[]=__FILE__;
  #define new DEBUG_NEW
  #endif
  ADOConn::ADOConn()
  {
  }
  ADOConn::~ADOConn()
  {
  }
  // 初始化—连接数据库
  void ADOConn::OnInitADOConn()
  {
  // 初始化OLE/COM库环境
  ::CoInitialize(NULL);
  try
  {
  // 创建Connection对象
  m_pConnection.CreateInstance("ADODB.Connection");
  // 设置连接字符串,必须是BSTR型或者_bstr_t类型
  _bstr_t strConnect = "Provider=SQLOLEDB; Server=CZ;Database=HrSys; uid=sa; pwd=sa;";
  m_pConnection->Open(strConnect,"","",adModeUnknown);
  }
  // 捕捉异常
  catch(_com_error e)
  {
  // 显示错误信息
  AfxMessageBox(e.Description());
  }
  }
  // 执行查询
  _RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL)
  {
  try
  {
  // 连接数据库,如果Connection对象为空,则重新连接数据库
  if(m_pConnection==NULL)
     OnInitADOConn();
  // 创建记录集对象
  m_pRecordset.CreateInstance(__uuidof(Recordset));
  // 取得表中的记录
  m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
  }
  // 捕捉异常
  catch(_com_error e)
  {
  // 显示错误信息
  AfxMessageBox(e.Description());
  }
  // 返回记录集
  return m_pRecordset;
  }
  // 执行SQL语句,Insert Update _variant_t
  BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL)
  {
  // _variant_t RecordsAffected;
  try
  {
  // 是否已经连接数据库
  if(m_pConnection == NULL)
     OnInitADOConn();
  // Connection对象的Execute方法:(_bstr_t CommandText,
  // VARIANT * RecordsAffected, long Options )
  // 其中CommandText是命令字串,通常是SQL命令。
  // 参数RecordsAffected是操作完成后所影响的行数,
  // 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名
  // adCmdProc-存储过程;adCmdUnknown-未知
  m_pConnection->Execute(bstrSQL,NULL,adCmdText);
  return true;
  }
  catch(_com_error e)
  {
  AfxMessageBox(e.Description());
  return false;
  }
  }
  void ADOConn::ExitConnect()
  {
  // 关闭记录集和连接
  if (m_pRecordset != NULL)
  m_pRecordset->Close();
  m_pConnection->Close();
  // 释放环境
  ::CoUninitialize();
  }

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81982-1-1.html 上篇帖子: Sql Server触发器 下篇帖子: sql server 2000 中多用户同时操作一个表的问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表