ADOTestMSSQL

来源:互联网 发布:json视图编辑器 编辑:程序博客网 时间:2024/06/07 07:04
  1. // ADOTest.cpp : 定义控制台应用程序的入口点。
  2. //
  3. #include "stdafx.h"
  4. using namespace std;
  5. int _tmain(int argc, _TCHAR* argv[])
  6. {
  7.     ::CoInitialize(NULL);                                                 //初始化COM组件,MFC用AfxOleInit()
  8.     _ConnectionPtr pConn;                                                 //定义智能指针
  9.     _CommandPtr pCmd;                                                     //定义智能指针
  10.     _RecordsetPtr pRecord;                                                //定义智能指针
  11.     _ParameterPtr pParam;                                                 //定义智能指针
  12.     _bstr_t strCnn("Provider=sqloledb.1;Data Source=(local);"             //连接MSSQL字符串
  13.             "Initial Catalog=RTU;User Id=sa;Password=5197313;");
  14.     
  15.     if (FAILED(pConn.CreateInstance("ADODB.Connection")))                 //初始ADODB连接
  16.     {
  17.         cout<<"Create Instance failed!"<<endl;
  18.     }
  19.     try 
  20.     {
  21.         pConn->Open(strCnn,"","",adConnectUnspecified);                   //连接数据库,ADO操作中建议语句中要常用try...catch()来捕获错误信息
  22.     } 
  23.     catch(_com_error e) 
  24.     {
  25.         cout<<"数据库连接失败!"<<endl;
  26.         return 0;
  27.     } 
  28.     pCmd.CreateInstance(__uuidof(Command));                             //初始_CommandPtr智能指针
  29.     pCmd->ActiveConnection = pConn;                                     //智能指针定位到连接指针.
  30.     //******************************普通sql语句操作****************************************************//
  31.     
  32.     /*pCmd->CommandText = "SELECT * FROM T_WMETER";                       //给CommandText赋SQL语句
  33.     pRecord.CreateInstance(__uuidof(Recordset));                        //初始_RecordsetPtr智能指针
  34.     pRecord = pCmd->Execute(NULL, NULL,adCmdText);                      //执行SQL语句
  35.     
  36.     if(!pRecord->BOF) 
  37.         pRecord->MoveFirst();                                           //设置指针初始位置
  38.     _variant_t var;
  39.     long Wmeter = 0;
  40.     var = pRecord->GetCollect("WMeterID");
  41.     if(var.vt != VT_NULL) 
  42.         Wmeter = var.lVal;
  43.     
  44.     pRecord->MoveNext();                                              //移动ADO指针显示下一条数据
  45.     var = pRecord->GetCollect("WMeterID");
  46.     if(var.vt != VT_NULL) 
  47.         Wmeter = var.lVal;
  48.     cout<<Wmeter<<endl;*/
  49.     //**********************************************************************************//
  50.    //*******************************测试用存储过程sp_1调用***************************************************//
  51.     _variant_t var;                               //定义传参变量
  52.     var.intVal = 555;                             //定义参数值
  53.     pCmd->CommandText = "sp_1";                   //指定存储过程
  54.     pParam.CreateInstance(__uuidof(Parameter));   //初始参数指针
  55.     pCmd->Parameters->Refresh();                  //刷新参数
  56.     pParam = pCmd->CreateParameter(_bstr_t("@pin"),adInteger,adParamInput,sizeof(int),var.intVal); //创建参数@pin
  57.     pCmd->Parameters->Append(pParam);                                                              //添加参数到指针
  58.     pParam = pCmd->CreateParameter(_bstr_t("@pout"),adInteger,adParamOutput,sizeof(int));          //创建参数@pout
  59.     pCmd->Parameters->Append(pParam);                                                              //添加参数到指针
  60.     try
  61.     {
  62.         pCmd->Execute(NULL,NULL,adCmdStoredProc);                                                  //执行存储过程
  63.     }
  64.     catch(_com_error e)
  65.     {
  66.         cout<<e.Description()<<endl;
  67.         cin.get();
  68.     }
  69.     try
  70.     {
  71.         cout<<pCmd->Parameters->GetItem("@pout")->GetValue().intVal<<endl;                         //获取OutPut参数的值
  72.     }
  73.     catch(_com_error e)
  74.     {
  75.         cout<<e.Description()<<endl;
  76.         cin.get();
  77.     }
  78.     cin.get();
  79.     return 0;
  80. }
 
原创粉丝点击