c 對mssql進行操作(ado)

2021-06-21 07:35:11 字數 3906 閱讀 6764

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 標籤名 獲取文字 要獲取上圖...