使用纯C++实现SQL Server2005 数据库读写操作详细步骤
環(huán)境:虛擬機(jī)windows xp,vs2008 + SQLServer 2005 Express
數(shù)據(jù)庫訪問技術(shù)采用ADO。
需要安裝的軟件包括:microsoft_dotnetfxchs2.0.exe、WindowsInstaller-KB893803-v2-x86.exe、SQLEXPR32_CHS.EXE、SQLServer2005_SSMSEE.msi、SQLServer2005SP3-KB955706-x86-CHS.exe。
數(shù)據(jù)庫的一些屬性配置及注意事項(xiàng)見后面參考文獻(xiàn)。
初始數(shù)據(jù)庫表的建立及代碼參考http://www.yesky.com/277/1893277.shtml
?
#include"stdafx.h"
#include<iostream>
#include<iomanip>//for setw()
#include"windows.h"
?
usingnamespace std;
?
//導(dǎo)入ADO相關(guān)類說明,路徑名可以根據(jù)自己系統(tǒng)安裝的ADO支持文件的路徑來自行設(shè)定
//#improt語句會在工程可執(zhí)行程序輸出目錄中產(chǎn)生兩個(gè)文件,分別為*.tlh(類型庫頭文件)及*.tli(類型庫實(shí)現(xiàn)文件)
//語句no_namespace說明ADO對象不使用命名空間,rename("EOF", "EndOfFile")說明將ADO中結(jié)束標(biāo)志EOF改為EndOfFile,以避免和其它庫中命名相沖突
#import"C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","EndOfFile")
?
classSTU
{
public:
??? charsnum[10];
??? charsname[10];
??? charssex[2];
??? longsage;
??? charsmajor[20];
public:
??? STU(){}
??? ~STU(){}
};
?
int _tmain(int argc,_TCHAR* argv[])
{
??? STUstudent;
?
??? ::CoInitialize(NULL);//初始化OLE/COM庫環(huán)境,為訪問ADO接口做準(zhǔn)備
?
??? //_RecordsetPtr智能指針,可以用來打開庫內(nèi)數(shù)據(jù)表,并可以對表內(nèi)的記錄、字段等進(jìn)行各種操作
??? _RecordsetPtr m_pRecordset("ADODB.Recordset");//定義記錄集對象
?
??? //_ConnectionPtr智能指針,通常用于打開、關(guān)閉一個(gè)庫連接或用它的Execute方法來執(zhí)行一個(gè)不返回結(jié)果的命令語句
??? _ConnectionPtr m_pConnection("ADODB.Connection");//定義數(shù)據(jù)庫連接對象
?
??? _bstr_tbstrSQL("select *from stu_info");//查詢語句
?
??? char*query_cmd = "DELETEFROM stu_info WHERE sname = '本拉登'";
?
??? try
??? {??
??????? m_pConnection.CreateInstance("ADODB.Connection");//創(chuàng)建Connection對象
?
??????? //設(shè)置連接字符串,必須是BSTR型或者_(dá)bstr_t類型,若數(shù)據(jù)庫在網(wǎng)絡(luò)上則Server為形如(192.168.1.5,3340)?
??????? _bstr_t strConnect = "Provider=SQLOLEDB; Server=.\\sqlexpress;Database=student; uid=sa; pwd=123456;";
???????
??????? m_pConnection->Open(strConnect,"","",adModeUnknown);//NULL、adConnectUnspecified、//建立與服務(wù)器連接
?
??????? if (m_pConnection ==NULL)
??????? {
??????????? cerr<<"Lind data ERROR!\n";
??????? }
?
??????? m_pRecordset.CreateInstance(__uuidof(Recordset));//創(chuàng)建記錄集對象
?
??????? //取得表中的記錄
??????? m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
?
??????? _variant_t vsnum, vsname,vsage, vssex,vsmajor;//對應(yīng)庫中的snum,sname,sage,ssex,smajor
?
??????? cout<<"學(xué)號姓名年齡性別專業(yè)";
??????? cout<<"\n-------------------------------------------\n";
?
??????? while (!m_pRecordset->EndOfFile)
??????? {
??????????? vsnum= m_pRecordset->GetCollect(_variant_t((long)0));//這兒給字段編號和字段名都可以
??????????? vsname= m_pRecordset->GetCollect("sname");
??????????? vsage= m_pRecordset->GetCollect("sage");
??????????? vssex= m_pRecordset->GetCollect("ssex");
??????????? vsmajor= m_pRecordset->GetCollect("smajor");
?
??????????? if (vsnum.vt !=VT_NULL && vsname.vt !=VT_NULL&& vsage.vt!=VT_NULL &&
??????????????? vssex.vt != VT_NULL&& vsmajor.vt!=VT_NULL)
??????????? {
??????????????? cout.setf(ios::left);
??????????????? cout<<setw(14)<<(char*)(_bstr_t)vsnum;
??????????????? cout<<setw(14)<<(char*)(_bstr_t)vsname;
??????????????? cout<<setw(8)<<vsage.lVal;
??????????????? cout<<setw(8)<<(char*)(_bstr_t)vssex;
??????????????? cout<<setw(20)<<(char*)(_bstr_t)vsmajor;
??????????????? cout.unsetf(ios::left);
??????????????? cout<<endl;
??????????? }
?
??????????? m_pRecordset->MoveNext();//移動下一條記錄
??????? }
?
??????? cout<<"\n------------------------------------------\n";
??????? cout<<"\n請輸入你要添加的學(xué)生信息\n";
??????? cout<<"學(xué)號:";
??????? cin>>student.snum;
??????? cout<<"\n姓名:";
??????? cin>>student.sname;
??????? cout<<"\n年齡:";
??????? cin>>student.sage;
??????? cout<<"\n性別:";
??????? cin>>student.ssex;
??????? cout<<"\n專業(yè):";
??????? cin>>student.smajor;
?
??????? m_pRecordset->MoveFirst();//移動到第一條記錄
??????? m_pRecordset->AddNew();//添加新記錄
??????? m_pRecordset->PutCollect("snum",_variant_t(student.snum));
??????? m_pRecordset->PutCollect("sname",_variant_t(student.sname));
??????? m_pRecordset->PutCollect("sage",_variant_t(student.sage));
??????? m_pRecordset->PutCollect("ssex",_variant_t(student.ssex));
??????? m_pRecordset->PutCollect("smajor",_variant_t(student.smajor));
??????? m_pRecordset->Update();
?
??????? m_pConnection->Execute(query_cmd,NULL, 1);//用Execute執(zhí)行sql語句來刪除
?
??????? m_pRecordset->Close();//關(guān)閉記錄集
??? }
??? catch (_com_errore)//捕捉異常
??? {
??????? cerr<<"\nERROR:"<<(char*)e.Description();//拋出異常
??? }
???
??? if (m_pConnection->State)
??? {
??????? m_pConnection->Close();
??? }
?
??? ::CoUninitialize();
?
??? return 0;
}
參考文獻(xiàn):
1、? http://wenku.baidu.com/view/f1ff0c1d964bcf84b9d57bbd.html
2、? http://www.yesky.com/277/1893277.shtml
3、? http://blog.csdn.net/hqw7286/article/details/5441000
4、? http://blogger.org.cn/blog/more.asp?name=fishyqd&id=13038
5、? http://www.west263.com/www/info/66267-1.htm
6、? http://www.cnblogs.com/Chinaluis/archive/2008/10/06/1304634.html
7、? http://zhidao.baidu.com/question/98140032.html
8、? http://blog.csdn.net/qingshansima/article/details/4059167
總結(jié)
以上是生活随笔為你收集整理的使用纯C++实现SQL Server2005 数据库读写操作详细步骤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV运动检测跟踪(blob tr
- 下一篇: Office2010启动慢的解决方法