ado是以com的形式來進行提供,所以他的許多行為都必須支援com的規範,在進行ado操作之前必須將ado的com物件引入到專案當中。
引入
#import "c:\program files\commonfiles\system\ado\msado15.dll" \
no_namespace rename("eof","endoffile")
但要注意不能放在stdafx.h檔案的開頭,而應該放在所有include指令的後面。否則在編譯時會出錯。
程式在編譯過程中,vc++會讀出msado15.dll中的型別庫資訊,自動產生兩個該型別庫的標頭檔案和實現檔案msado15.tlh和msado15.tli(在您的debug或release目錄下)。在這兩個檔案裡定義了ado的所有物件和方法,以及一些列舉型的常量等。我們的程式只要直接呼叫這些方法就行了,與使用mfc中的coledispatchdriver類呼叫automation物件十分類似。
在引入之後對com物件進行初始化coinitialize(null)
ado
的三個關鍵物件
在c++有關資料庫的操作之中有三個非常養分的物件,分別有連線物件(_connection)、命令物件(_command)和記錄集物件(_recordset),這三個物件封裝了資料庫核心的操作。
_connection:負責對資料庫進行連線和管理。
_connection物件的建立
_connectionptr sqlsp; //建立乙個_connectionptr用來做對資料庫的操作
//建立物件的例項,並且將結果反饋給hresult物件
hresulthr=sqlsp.createinstance(_uuidof(connection));
if(failed(hr))
cout<<"_connectionptr物件指標例項化失敗!!!"if(hr!=s_ok)//判斷 sqlsp的物件例項化是否成功
cout<<"_connectionptr物件指標例項化失敗!!!"定義連線字串
_bstr_t strconnect="driver=;server=127.0.0.1,1433;uid=sa;pwd=sa;database=zy;";
上面定義了乙個sql的連線字串,其實server表示目標計算機的位址或者服務名,1433表示目標計算機的埠,uid表示sqlserver的使用者名稱,pwd表示sqlserver的密碼,database表示要操作的資料庫名稱
開啟資料庫的鏈結
sqlsp->open(strconnect,"","",admodeunknown);
admodeunknown表示的是資料庫連線的模式,通常來用設定其許可權。admodeunknown是預設的選項,表示當前的模式未確認,更多的細節可以參考msdn上的介紹
_recordsetptr
:記錄集物件指標,用來執行
sql語句並記錄查詢結果。可以理解成,使用者通過
select
查詢語句查詢資料裡,將查詢到的結果儲存到該物件裡面,然後對其進行遍歷操作。
_recordsetptr m_precordset;//定義_ recordsetptr物件
//以下語句是對m_precordset物件進行例項化,並且操作是否成功
if(failed(m_precordset.createinstance(_uuidof( recordset ))))
cout<<"記錄集物件指標例項化失敗!"//通過呼叫open來開啟資料庫進行查詢資料,以下紅色代表的查詢的語句。
m_precordset->open("select *from zyprocstatus",(idispatch*)sqlsp,adopendynamic,adlockoptimistic,adcmdtext);//開啟資料庫,執行sql語句
//當使用者已經查詢完畢以後,可以通過以下方式來遍歷資料庫
m_precordset->movefirst();//定位到該資料集的第一行資料
while(!m_precordset->adoeof)//判斷是否遍歷完成
//通過呼叫 m_precordset->fields->getitem(_variant_t("列名"))->value 可以獲得當前行的特定列資料
m_precordset->fields->getitem(_variant_t("tpready"))->value=_bstr_t("33");//將結果更改為33
m_precordset->update();//更新當前的操作結果
stringbookname=(char*)(_bstr_t)(m_precordset->fields->getitem(_variant_t("tpready"))->value);
coutmovenext();//讀取下一行資料
自定義sql語句,使用者可以呼叫_connectionptr物件的execute方法來自定義執行語句
_bstr_t bstrsql;
bstrsql="deletezyprocstatus where tpready=22 ";
sqlsp->execute(bstrsql,null,adcmdtext);
#include
#include
#include
#include
using
namespace std;
#import
"c:\programfiles\common files\system\ado\msado15.dll" no_namespace rename("eof","adoeof")
void main() */
if(hr!=s_ok)
else ;server=127.0.0.1,1433;uid=sa;pwd=sa;database=zy;";
//_bstr_tstrconnect="provider=sqloledb;server=127.0.0.1,1433;database=pbms;uid=sa;pwd=pp471006459;";
//_bstr_tstrconnect="provider=sqloledb.1;password=pp471006459;persist securityinfo=true;user id=sa;"
//"initialcatalog=pbms;data source=127.0.0.1,1433"; //
以上這三條
strconnect
語句都可以用!!看自己喜好選擇用吧 //
要注意修改使用者名稱
uid、密碼
pwd、資料庫名
database
,這三個引數均是你自己
sql server
的資料庫資訊
sqlsp->open(strconnect,"","",admodeunknown);
}catch(_com_error&e)
_recordsetptr m_precordset; //
記錄集物件指標,用來執行
sql語句並記錄查詢結果
if(failed(m_precordset.createinstance(_uuidof( recordset ))))
//charstrsql="select * from books";
try
catch(_com_error &e)
try
}catch(_com_error &e)
}_bstr_t bstrsql;
bstrsql="deletezyprocstatus where tpready=22 ";
sqlsp->execute(bstrsql,null,adcmdtext);
system("pause");
}
C 對XML進行操作
c 操作xml時,要引入命名空間using system.xml 獲取根節點的方法 1 知道根節點名稱 xmlnode root xmldoc.selectsinglenode 根節點名稱 2 不知道根節點名稱 xmlelement root xmldoc.documentelement xml中n...
ADO對Sql的儲存過程操作
以乙個銀行轉賬問題做例項 首先在sql中編寫乙個儲存過程 create table bank id int primary key identity 1,1 ammonut money insert into bank values 10000 insert into bank values 000...
C 庫Tinyxml對xml進行操作
首先將這6項,新增到原始檔中,否則會出錯。標頭檔案包含 include include include tinystr.h include tinyxml.h 根據標籤名獲取元素 tixmlelement 自定變數 上一級元素指標變數 firstchildelement 標籤名 獲取文字 要獲取上圖...