Description:

一. 数据库的编程(ADO) 
     要用ADO连接数据的头文件中加入    #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF")  
 // 初始化OLE/COM库环境     _ConnectionPtr m_pConnection; 
 ::CoInitialize(NULL); 
 char buf[256],server[256],datebase[256],uid[256],pwd[256];char str[255]; 
GetCurrentDirectory(255,str);//获得当前目录 
strcat(str,"\\dbinfo.ini");int len0=GetPrivateProfileString("dbinfo","Provider","No Text",buf,256,str);//读取配置文件中的数据库连接信息 
int len1=GetPrivateProfileString("dbinfo","server","No Text",server,256,str); 
int len2=GetPrivateProfileString("dbinfo","Database","No Text",datebase,256,str); 
int len3=GetPrivateProfileString("dbinfo","uid","No Text",uid,256,str); 
int len4=GetPrivateProfileString("dbinfo","pwd","No Text",pwd,256,str); try 
 { 
  // 创建Connection对象 
  m_pConnection.CreateInstance("ADODB.Connection"); 
  // 设置连接字符串,必须是BSTR型或者_bstr_t类型 
 _bstr_t strConnect = "Provider="; 
  strConnect =strConnect+buf; 
  strConnect =strConnect+";Server="; 
  strConnect =strConnect+server; 
   strConnect =strConnect+";Database="; 
   strConnect =strConnect+datebase; 
   strConnect =strConnect+";uid="; 
   strConnect =strConnect+uid; 
   strConnect =strConnect+";pwd="; 
   strConnect =strConnect+pwd;                                                        m_pConnection->Open(strConnect,"","",adModeUnknown);//连接到指定的数据库 
 } 
 // 捕捉异常 
 catch(_com_error e) 
 { 
  // 显示错误信息 
  AfxMessageBox(e.Description()); 
 }  
  执行无返回值(记录集)的SQL语句,Insert Update等无返回值的语句     --- 如何知道用pConnection能否获取存取过程的返回值(http://zhidao.baidu.com/question/202870363.html)                     
// Connection对象的Execute方法:(_bstr_t CommandText,  // VARIANT * RecordsAffected, long Options )  
  // 其中CommandText是命令字串,通常是SQL命令。 
  // 参数RecordsAffected是操作完成后所影响的行数,  
  // 参数Options表示CommandText的类型:adCmdText-文本命令;adCmdTable-表名 
  // adCmdProc-存储过程;adCmdUnknown-未知 
  m_pConnection->Execute(bstrSQL,NULL,adCmdText);                     
执行有返回值(记录集)的SQL语句 
_RecordsetPtr m_pRecordset;  
// 创建记录集对象 
m_pRecordset.CreateInstance(__uuidof(Recordset)); 
// 返回表中的记录 
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); 
CListCtrl m_list1;//记录显示在CListCtrl中 
if(!m_pRecordset->adoEOF) //如果记录不为空 
{  
 while(!m_pRecordset->adoEOF) 
 { 
  m_list1.InsertItem(i,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("ID"));  
  m_list1.SetItemText(i,1,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("tintCallType"));  
  m_list1.SetItemText(i,2,(LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("tintHangUp")); 
     
  _variant_t vMaxid(m_pRecordset->GetCollect("strCallingNmb")); 
  if(vMaxid.vt==VT_NULL) 
   vMaxid=""; 
  m_list1.SetItemText(i,3,(LPCTSTR)(_bstr_t)vMaxid); 
     
  _variant_t vMaxid0(m_pRecordset->GetCollect("strCalledNmb")); 
  if(vMaxid0.vt==VT_NULL) 
   vMaxid0=""; 
          m_list1.SetItemText(i,4,(LPCTSTR)(_bstr_t)vMaxid0); 
     
         _variant_t vMaxid1(m_pRecordset->GetCollect("strOriginNmb")); 
    if(vMaxid1.vt==VT_NULL) //此字段在数据库中为NULL值 
     vMaxid1="";           i++;//CListCtrl中的第i行显示此记录 
    m_pRecordset->MoveNext();//下一条记录 
     
   } 
  } 
  m_pRecordset->Close();//记录集读取完毕,关闭记录集  
执行带参数无返回值(一个或者多个记录集)的存储过程 
_CommandPtr m_pnewCommand;    
m_pnewCommand.CreateInstance("ADODB.Command"); m_pnewCommand->ActiveConnection=m_pConnection; 
m_pnewCommand->CommandType=adCmdStoredProc; 
m_pnewCommand->CommandText=_bstr_t("proc_deleteSMCBQueue"); 
unsigned char newflag = 1; 
_ParameterPtr Pnewflag,PnewrecordID; 
Pnewflag.CreateInstance(__uuidof(Parameter)); 
PnewrecordID.CreateInstance(__uuidof(Parameter)); 
        
CString newst=""; 
newst.Format("%d",recordID); 
Pnewflag=m_pnewCommand->CreateParameter(_bstr_t("flag"),adTinyInt,adParamInput,1,(_variant_t)newflag); 
m_pnewCommand->Parameters->Append(Pnewflag);  
PnewrecordID=m_pnewCommand->CreateParameter(_bstr_t("recordID"),adInteger,adParamInput,4,(_variant_t)(_bstr_t)newst); 
m_pnewCommand->Parameters->Append(PnewrecordID);  
        
try 

 m_pnewCommand->Execute(NULL,NULL,adCmdStoredProc); 

catch(...) 

 }  
执行有参数有返回记录集的存储过程(其实就是执行有返回值(记录集)的SQL语句) 
CString sqlrecord ="exec proc_getSMCBQueue 1"; 
try 

 m_pRecordset = m_pConnection->Execute((_bstr_t)sqlrecord,NULL,adCmdText); 

catch(...) 


今天就记一下VC关于数据库的编程吧,下次再记VC关于网络的编程吧! 
只是真正的用_CommandPtr m_pnewCommand执行存储过程返回一个或者多个记录集,再分别对各记录集进行操作还没有实现啊

转载于:https://www.cnblogs.com/carl2380/archive/2011/08/29/2158975.html

!!!. 数据库的编程(ADO) --- 三种sql语句执行的不同相关推荐

  1. explain ref_数据库查询优化:使用explain分析sql语句执行效率

    对于复杂.效率低的sql语句,我们通常是使用explain sql 来分析sql语句,这个语句可以打印出,语句的执行过程.这样方便我们分析,进行优化. 首先,说一下,explain查询出来的数据如何分 ...

  2. linq拼接where语句_C# 10. LINQ 的三种查询语句写法

    C# 10. LINQ 的三种查询语句写法 前言: LINQ(语言集成查询)是 C#编程语言中的一部分.它在.NET Framework 3.5 和 C#3.0 被引入,在 System.Linq 命 ...

  3. 数据库索引--SQL语句执行效率、分析及优化

    数据库表中字段上创建的索引,在写SQL语句进行查询时,索引可能会被使用到,也肯能因为SQL语句导致索引在此条SQL语句执行时索引无效. 聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的解释是:索 ...

  4. 事半功倍的20种SQL语句优化

    事半功倍的20种SQL语句优化 1.使用where条件限定要查询的数据,避免返回多余的行 假设业务场景是查询某个用户是否是会员 优化前: List<Long> userIds = sqlM ...

  5. VS中C#读取app.config数据库配置字符串的三种方法(转)

    关于VS2008或VS2005中数据库配置字符串的三种取法 VS2008建立Form程序时,如果添加数据源会在配置文件 app.config中自动写入连接字符串,这个字符串将会在你利用DataSet, ...

  6. 数据库创建(利用写好的数据库表生成创建表的sql语句+利用生成的数据库创建表加同步数据sql)

    一.利用写好的数据库表生成创建表的sql语句 1.简单创建一个数据库,并建一个表,并编辑数据. a.建库 b.建表 c.编辑表,保存时输入表名 d.刷新一下,出来了 e.转存导出sql文件. 二.利用 ...

  7. appSettings 配置mysql_app.config数据库配置字符串的三种取法

    关于VS2008或VS2005中数据库配置字符串的三种取法 VS2008建立Form程序时,如果添加数据源会在配置文件app.config中自动写入连接字符串,这个字符串将会在你利用DataSet,S ...

  8. mysql面试题sql语句_数据库MySQL经典面试题之SQL语句

    数据库MySQL经典面试题之SQL语句 1.需要数据库表1.学生表 Student(SID,Sname,Sage,Ssex) --SID 学生编号,Sname 学生姓名,Sage 出生年月,Ssex ...

  9. Oracle 实验三: SQL语句基础(复习)

    实验三: SQL语句基础(复习) 一.实验目的 1.oracle中常用数据字典的使用. 2.复习并掌握表管理(创建.修改.创建约束.删除等)操作 二.实验内容 1.利用数据字典完成以下操作,对运行过程 ...

最新文章

  1. spring中ClassPathXmlApplication和FileSystemXmlApplicationContext使用区别
  2. C++之static关键字
  3. 2-Authentication Framework Chain of Trust
  4. 需求用例分析之九:序列图
  5. IntelliJ IDEA 15发布
  6. 魔兽最多人的服务器,魔兽怀旧服:70级热门服务器人口一览!这4大服最值得建号投入!...
  7. java arrays.equals_Java Arrays类的常见使用
  8. ‘(‘:illegal token on right side of ‘::‘
  9. 开源软件那么多,我们该如何选择?|洞见
  10. [react] 使用ES6的class定义的组件不支持mixins了,那用什么可以替代呢?
  11. 秒杀系统设计中的业务性思考
  12. 使用代理为业务操作添加安全检测
  13. 了解一个百万级 PHP 网站的架构
  14. mysql介绍索引类型的章节_MySQL索引类型介绍
  15. 修复EXE文件无法打开
  16. python爬虫:获取12306网站火车站对应三字码
  17. uLua和toLua原理解析
  18. FPGA设计中提高工作频率及降低功耗题目合集
  19. IGRP和EIGRP 详解
  20. C - Justice

热门文章

  1. 在二叉树中找值为x的结点(假设所有结点的值都不一样)
  2. uicontrol图形对象用户界面的用法
  3. Pandas.DataFrame按行求百分数(比例数)
  4. [笔记]filter,空字符,0,None都是False应用
  5. winform模拟登陆网页_winform跳转到制定的网页并自动实现登陆功能
  6. 第二十八讲 解非齐次线性方程组
  7. mySql中使用命令行建表基本操作
  8. 公众号管理01-基本架构
  9. 基础拾遗------委托详解
  10. LeetCode:Length of Last Word