使用纯C++实现SQL Server2005 数据库读写操作详细步骤
環境:虛擬機windows xp,vs2008 + SQLServer 2005 Express
數據庫訪問技術采用ADO。
需要安裝的軟件包括:microsoft_dotnetfxchs2.0.exe、WindowsInstaller-KB893803-v2-x86.exe、SQLEXPR32_CHS.EXE、SQLServer2005_SSMSEE.msi、SQLServer2005SP3-KB955706-x86-CHS.exe。
數據庫的一些屬性配置及注意事項見后面參考文獻。
初始數據庫表的建立及代碼參考http://www.yesky.com/277/1893277.shtml
?
#include"stdafx.h"
#include<iostream>
#include<iomanip>//for setw()
#include"windows.h"
?
usingnamespace std;
?
//導入ADO相關類說明,路徑名可以根據自己系統安裝的ADO支持文件的路徑來自行設定
//#improt語句會在工程可執行程序輸出目錄中產生兩個文件,分別為*.tlh(類型庫頭文件)及*.tli(類型庫實現文件)
//語句no_namespace說明ADO對象不使用命名空間,rename("EOF", "EndOfFile")說明將ADO中結束標志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庫環境,為訪問ADO接口做準備
?
??? //_RecordsetPtr智能指針,可以用來打開庫內數據表,并可以對表內的記錄、字段等進行各種操作
??? _RecordsetPtr m_pRecordset("ADODB.Recordset");//定義記錄集對象
?
??? //_ConnectionPtr智能指針,通常用于打開、關閉一個庫連接或用它的Execute方法來執行一個不返回結果的命令語句
??? _ConnectionPtr m_pConnection("ADODB.Connection");//定義數據庫連接對象
?
??? _bstr_tbstrSQL("select *from stu_info");//查詢語句
?
??? char*query_cmd = "DELETEFROM stu_info WHERE sname = '本拉登'";
?
??? try
??? {??
??????? m_pConnection.CreateInstance("ADODB.Connection");//創建Connection對象
?
??????? //設置連接字符串,必須是BSTR型或者_bstr_t類型,若數據庫在網絡上則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、//建立與服務器連接
?
??????? if (m_pConnection ==NULL)
??????? {
??????????? cerr<<"Lind data ERROR!\n";
??????? }
?
??????? m_pRecordset.CreateInstance(__uuidof(Recordset));//創建記錄集對象
?
??????? //取得表中的記錄
??????? m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
?
??????? _variant_t vsnum, vsname,vsage, vssex,vsmajor;//對應庫中的snum,sname,sage,ssex,smajor
?
??????? cout<<"學號姓名年齡性別專業";
??????? 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請輸入你要添加的學生信息\n";
??????? cout<<"學號:";
??????? cin>>student.snum;
??????? cout<<"\n姓名:";
??????? cin>>student.sname;
??????? cout<<"\n年齡:";
??????? cin>>student.sage;
??????? cout<<"\n性別:";
??????? cin>>student.ssex;
??????? cout<<"\n專業:";
??????? 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執行sql語句來刪除
?
??????? m_pRecordset->Close();//關閉記錄集
??? }
??? catch (_com_errore)//捕捉異常
??? {
??????? cerr<<"\nERROR:"<<(char*)e.Description();//拋出異常
??? }
???
??? if (m_pConnection->State)
??? {
??????? m_pConnection->Close();
??? }
?
??? ::CoUninitialize();
?
??? return 0;
}
參考文獻:
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
總結
以上是生活随笔為你收集整理的使用纯C++实现SQL Server2005 数据库读写操作详细步骤的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenCV运动检测跟踪(blob tr
- 下一篇: Office2010启动慢的解决方法