当前位置: 代码迷 >> 综合 >> 《数据库系统概论》课程学习(22)——VCSQL
  详细解决方案

《数据库系统概论》课程学习(22)——VCSQL

热度:98   发布时间:2023-10-01 11:06:32.0
#include <iostream>
#include <string>
using namespace std;#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","rsEOF")void main(void)
{CoInitialize(NULL);  /*ADO采用的是COM技术,使用必须初始化COM*/_ConnectionPtr pCon(__uuidof(Connection));_RecordsetPtr  pRst(__uuidof(Recordset));  /*Recordset对象用来获取数据表内的数据*//*连接字符串,MYDB为数据库名,数据库采用的是Windows身份验证*/pCon->ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MYDB;Data Source=.";pCon->Open("","","",adConnectUnspecified);_bstr_t SQL = "select * from student";  /*定义SQL命令串*/pRst=pCon->Execute(SQL,NULL,adCmdText);  /*使用Execute方法执行SQL语句*/while(!pRst->rsEOF){_variant_t var1 = pRst->GetCollect("sno");  /*查询数据,返回类型是_variant_t*/_variant_t var2 = pRst->GetCollect("sname");_variant_t var3 = pRst->GetCollect("ssex");if(var1.vt != VT_NULL) {cout<<(LPCSTR)_bstr_t(var1)<<endl;cout<<(LPCSTR)_bstr_t(var2)<<endl;cout<<(LPCSTR)_bstr_t(var3)<<endl;cout<<endl;}pRst->MoveNext();  /*下移读取下一个*/}//pCon->Execute("insert into student(sno,sname,ssex) values('12','ldh','F')",NULL,adCmdText);//pCon->Execute("update student set ssex='M' where sno='12'",NULL,adCmdText);//pCon->Execute("delete from student where sno='12'",NULL,adCmdText);/*关闭*/pRst->Close();  /*关闭记录集*/pRst.Release();  /*释放智能指针*///以下代码调用存储过程try{_CommandPtr m_pCommand;char cvar1[] = "1", cvar2[] = "2";  //两个存储过程输入型参数值long cvar3 = 0;                     //存放存储过程输出型参数值m_pCommand.CreateInstance(__uuidof(Command));m_pCommand->ActiveConnection = pCon;   //使用当前连接m_pCommand->CommandType = adCmdStoredProc;   //指定调用存储过程m_pCommand->CommandText=_bstr_t("dbo.get_grade");   //指定存储过程名_variant_t vvar1, vvar2, vvar3;  //定义三个参数的变体类vvar1 = _variant_t(_bstr_t(cvar1));  //初始化三个参数vvar2 = _variant_t(_bstr_t(cvar2));vvar3 = _variant_t(cvar3, VT_I4);_ParameterPtr mp_var1, mp_var2, mp_var3;  //创建每一个参数,并进行绑定。mp_var1.CreateInstance(__uuidof(Parameter));mp_var2.CreateInstance(__uuidof(Parameter));mp_var3.CreateInstance(__uuidof(Parameter));mp_var1 = m_pCommand->CreateParameter(_bstr_t("s_no"), adChar, adParamInput, sizeof(vvar1), vvar1);m_pCommand->Parameters->Append(mp_var1);mp_var2 = m_pCommand->CreateParameter(_bstr_t("c_no"), adChar, adParamInput, sizeof(vvar2), vvar2);m_pCommand->Parameters->Append(mp_var2);mp_var3 = m_pCommand->CreateParameter(_bstr_t("grade"), adInteger, adParamOutput, sizeof(vvar3), vvar3);m_pCommand->Parameters->Append(mp_var3);m_pCommand->Execute(NULL, NULL, adCmdStoredProc);  //真正调用指定的存储过程cvar3 = (long)mp_var3->Value;   //获取存储过程返回的参数值cout<<"Grade: "<<cvar3<<endl;}catch(_com_error &error){printf("\n%s\n", error.ErrorMessage());}pCon->Close();  /*关闭连接*/pCon.Release();  /*释放智能指针*/CoUninitialize();  /*释放COM;初始化COM用完后必须释放*/return;
}