c++ SQL Server ADO串连

第一次玩CSDN,一个大学本科生,到了快毕业的年纪,真不知道是应该样样涉猎还是一心钻研。怎么说,走一步是一步吧。

今天找了做了C++ 和 SQLServer 连接的方式,在网上寻找很多方法并不适用,今天自己改着改着弄出来了,留作纪念!

#include <icrsint.h>
#include<iostream>
#include<iomanip>
#include <string>
using namespace std;
#import "c:\program files\common files\system\ado\msado15.dll"  no_namespace rename("EOF", "adoEOF") //ADO

void main()
{	
	CoInitialize(NULL);
	_ConnectionPtr  sqlSp;
	HRESULT hr=sqlSp.CreateInstance(_uuidof(Connection));
	if(FAILED(hr))
	{
		cout<<"_ConnectionPtr¶ÔÏóÖ¸ÕëʵÀý»¯Ê§°Ü!!!"<<endl;
		return ;
	}
	else {
		try {
			_bstr_t strConnect="Driver={sql server};server=127.0.0.1,1433;uid=***;pwd=****;database=*****;";   
			sqlSp->Open(strConnect,"","",adModeUnknown);
		}
		catch(_com_error &e) {
			cout<<"´ò¿ªÊý¾Ý¿âʧ°Ü!!"<<endl;
		}

		//ÊäÈë½×¶Î
		cout<<"1£º²éѯ"<<endl;
		cout<<"2£º²åÈë"<<endl;
		cout<<"3£ºÉ¾³ý"<<endl;
		int flag;
		cin>>flag;
	
		
		if(flag==1)                  //²éѯÊý¾Ý¿â½á¹û
		{
			_RecordsetPtr m_pRecordset;           //ÉùÃ÷¼Ç¼¼¯¶ÔÏóÖ¸Õ룬ÓÃÀ´Ö´ÐÐSQLÓï¾ä
			if(FAILED(m_pRecordset.CreateInstance( _uuidof( Recordset ))))
			{
				cout<<"³õʼ»¯¼Ç¼¼¯¶ÔÏóÖ¸Õëʧ°Ü!"<<endl;
				return;
			}
			try
			{
				//m_pRecordset->Open("select * from dbo.student",(IDispatch*)sqlSp,adOpenDynamic,adLockOptimistic, adCmdText);//Ö´Ðе¥±íSQLÓï¾ä
				m_pRecordset->Open("select dbo.student.ID,dbo.student.name,dbo.stugrade.grade from dbo.student join dbo.stugrade on dbo.student.ID=dbo.stugrade.ID",
					(IDispatch*)sqlSp,adOpenDynamic,adLockOptimistic, adCmdText);           //Ö´Ðжà±íÁ¬½Ó
			}
			catch (_com_error &e)
			{
				cout<<"SQLÓï¾äÖ´ÐÐʧ°Ü!!"<<endl;
			}

			try {
				m_pRecordset->MoveFirst();
				cout<<"²éѯ½á¹ûÈçÏÂËùʾ:"<<endl;
				while(!m_pRecordset->adoEOF) 
				{
					string stu_num=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("ID"))->Value);
					string stu_name=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("name"))->Value);
					string stu_grade=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("grade"))->Value);
					cout<<stu_num<<" "<<stu_name<<" "<<stu_grade<<endl;
					m_pRecordset->MoveNext();
				}

			}
			catch (_com_error &e)
			{
				cout<<"½á¹û³ö´í!!"<<endl;
			}
		}

		else if(flag==2)
		{
			_RecordsetPtr m_pRecordset;           //ÉùÃ÷¼Ç¼¼¯¶ÔÏóÖ¸Õ룬ÓÃÀ´Ö´ÐÐSQLÓï¾ä
			if(FAILED(m_pRecordset.CreateInstance( _uuidof( Recordset ))))
			{
				cout<<"³õʼ»¯¼Ç¼¼¯¶ÔÏóÖ¸Õëʧ°Ü!"<<endl;
				return;
			}
			
			_bstr_t insert_sql="insert into dbo.student values(4,'wang')";
			try
			{
				sqlSp->Execute(insert_sql,NULL,adCmdText);
				m_pRecordset->Open("select * from dbo.student",(IDispatch*)sqlSp,adOpenDynamic,adLockOptimistic, adCmdText);//Ö´ÐвåÈëºó½øÐÐSQLÓï¾ä²éѯ
			}
			catch (_com_error &e)
			{
				cout<<"SQLÓï¾äÖ´ÐÐʧ°Ü!!"<<endl;
			}

			try {
				m_pRecordset->MoveFirst();
				cout<<"²éѯ½á¹ûÈçÏÂËùʾ:"<<endl;
				while(!m_pRecordset->adoEOF) 
				{
					string stu_num=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("ID"))->Value);
					string stu_name=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("name"))->Value);
					cout<<stu_num<<" "<<stu_name<<endl;
					m_pRecordset->MoveNext();
				}

			}
			catch (_com_error &e)
			{
				cout<<"½á¹û³ö´í!!"<<endl;
			}
		}
		
		else if(flag==3)                 //ɾ³ý
		{
			_RecordsetPtr m_pRecordset;           //ÉùÃ÷¼Ç¼¼¯¶ÔÏóÖ¸Õ룬ÓÃÀ´Ö´ÐÐSQLÓï¾ä
			if(FAILED(m_pRecordset.CreateInstance( _uuidof( Recordset ))))
			{
				cout<<"³õʼ»¯¼Ç¼¼¯¶ÔÏóÖ¸Õëʧ°Ü!"<<endl;
				return;
			}
			
			_bstr_t delete_sql="delete from dbo.student where ID=4";
			try
			{
				sqlSp->Execute(delete_sql,NULL,adCmdText);
				m_pRecordset->Open("select * from dbo.student",(IDispatch*)sqlSp,adOpenDynamic,adLockOptimistic, adCmdText);//Ö´ÐвåÈëºó½øÐÐSQLÓï¾ä²éѯ
			}

			catch (_com_error &e)
			{
				cout<<"SQLÓï¾äÖ´ÐÐʧ°Ü!!"<<endl;
			}

			try {
				m_pRecordset->MoveFirst();
				cout<<"²éѯ½á¹ûÈçÏÂËùʾ:"<<endl;
				while(!m_pRecordset->adoEOF) 
				{
					string stu_num=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("ID"))->Value);
					string stu_name=(char*)(_bstr_t)(m_pRecordset->Fields->GetItem(_variant_t("name"))->Value);
					cout<<stu_num<<" "<<stu_name<<endl;
					m_pRecordset->MoveNext();
				}

			}
			catch (_com_error &e)
			{
				cout<<"½á¹û³ö´í!!"<<endl;
			}
		}
	}
	system("pause");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值