国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

VC++下使用ADO編寫數據庫程序(1)

2019-11-17 05:15:52
字體:
來源:轉載
供稿:網友
預備:(1)、引入ADO類 #import "c:/PRogram files/common files/system/ado/msado15.dll" /

no_namespace /

rename ("EOF", "adoEOF")

(2)、初始化COM在MFC中可以用AfxOleInit();非MFC環境中用:

CoInitialize(NULL);

CoUnInitialize();(3)#import 包含后就可以用3個智能指針了:_ConnectionPtr、_RecordsetPtr和_CommandPtr1.連接和關閉數據庫 (1)連接 例子:連接access數據庫

AfxOleInit();//初始化

HRESULT hr;

try

{

hr = m_pConnection.CreateInstance("ADODB.Connection");///創建Connection對象

if(SUCCEEDED(hr))

{

m_pConnection->ConnectionTimeout = 0;

hr = m_pConnection->Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb", "", "", adModeUnknown);

//m_pConnection->PutDefaultDatabase ((_bstr_t)"DB");//設置默認數據庫m_pCommand.CreateInstance(__uuidof(Command));

m_pCommand->CommandTimeout = 5;

m_pCommand->ActiveConnection = m_pConnection;

}

}

catch(_com_error e)///捕捉異常

{

CString errormessage;

errormessage.Format("連接數據庫失敗!/r/n錯誤信息:%s",e.ErrorMessage());

AfxMessageBox(errormessage);///顯示錯誤信息

}(2)、關閉 //假如數據庫連接有效

if( m_pConnection->State )

m_pConnection->Close();

m_pConnection = NULL;  (3)、設置連接時間 //設置連接時間-----------------------------------

pConnection->put_ConnectionTimeout(long(5));

2.打開一個結果集(1)打開,首先創建一個_RecordsetPtr實例,然后調用Open()得到一條SQL語句的執行結果

_RecordsetPtrm_pRecordset;

m_pRecordset.CreateInstance(__uuidof(Recordset));// 在ADO操作中建議語句中要常用try...catch()來捕捉錯誤信息,

// 因為它有時會經常出現一些意想不到的錯誤。jingzhou xu

try

{

m_pRecordset->Open("SELECT * FROM DemoTable",// 查詢DemoTable表中所有字段

m_pConnection.GetInterfacePtr(),  // 獲取庫接庫的IDispatch指針

adOpenDynamic,

adLockOptimistic,

adCmdText);

}

catch(_com_error *e)

{

AfxMessageBox(e->ErrorMessage());

}(2)關閉結果集 m_pRecordset->Close();3.操作一個結果集(1)、遍歷(讀取)

a)、用pRecordset->adoEOF來判定數據庫指針是否已經移到結果集的末尾了;m_pRecordset->BOF判定是否 在第一條記錄前面: while(!m_pRecordset->adoEOF)

{

var = m_pRecordset->GetCollect("Name");

if(var.vt != VT_NULL)

strName = (LPCSTR)_bstr_t(var);

var = m_pRecordset->GetCollect("Age");

if(var.vt != VT_NULL)

strAge = (LPCSTR)_bstr_t(var);

m_AccessList.AddString( strName + " --> "+strAge );

m_pRecordset->MoveNext();

}
b)、取得一個字段的值的辦法有兩種辦法一是//表示取得第0個字段的值 m_pRecordset->GetCollect("Name");或者 m_pRecordset->GetCollect(_variant_t(long(0));二是

pRecordset->get_Collect("COLUMN_NAME");或者 pRecordset->get_Collect(long(index));(2)、添加a)、調用m_pRecordset->AddNew();

b)、調用m_pRecordset->PutCollect();給每個字段賦值

c)、調用m_pRecordset->Update();確認(3)、修改

(4)、刪除

a)、把記錄指針移動到要刪除的記錄上,然后調用Delete(adAffectCurrent) try

{

// 假設刪除第二條記錄

m_pRecordset->MoveFirst();

m_pRecordset->Move(1);       

// 從0開始

m_pRecordset->Delete(adAffectCurrent); 

// 參數adAffectCurrent為刪除當前記錄

m_pRecordset->Update();

}

catch(_com_error *e)

{

AfxMessageBox(e->ErrorMessage());

} 預備:(1)、引入ADO類 #import "c:/program files/common files/system/ado/msado15.dll" /

no_namespace /

rename ("EOF", "adoEOF")

(2)、初始化COM在MFC中可以用AfxOleInit();非MFC環境中用:

CoInitialize(NULL);

CoUnInitialize();(3)#import 包含后就可以用3個智能指針了:_ConnectionPtr、_RecordsetPtr和_CommandPtr1.連接和關閉數據庫 (1)連接 例子:連接Access數據庫

AfxOleInit();//初始化

HRESULT hr;

try

{

hr = m_pConnection.CreateInstance("ADODB.Connection");///創建Connection對象

if(SUCCEEDED(hr))

{

m_pConnection->ConnectionTimeout = 0;

hr = m_pConnection->Open( "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db.mdb", "", "", adModeUnknown);

//m_pConnection->PutDefaultDatabase ((_bstr_t)"DB");//設置默認數據庫m_pCommand.CreateInstance(__uuidof(Command));

m_pCommand->CommandTimeout = 5;

m_pCommand->ActiveConnection = m_pConnection;

}

}

catch(_com_error e)///捕捉異常

{

CString errormessage;

errormessage.Format("連接數據庫失敗!/r/n錯誤信息:%s",e.ErrorMessage());

AfxMessageBox(errormessage);///顯示錯誤信息

}(2)、關閉 //假如數據庫連接有效

if( m_pConnection->State )

m_pConnection->Close();

m_pConnection = NULL;  (3)、設置連接時間 //設置連接時間-----------------------------------

pConnection->put_ConnectionTimeout(long(5));

2.打開一個結果集(1)打開,首先創建一個_RecordsetPtr實例,然后調用Open()得到一條SQL語句的執行結果

_RecordsetPtrm_pRecordset;

m_pRecordset.CreateInstance(__uuidof(Recordset));// 在ADO操作中建議語句中要常用try...catch()來捕捉錯誤信息,

// 因為它有時會經常出現一些意想不到的錯誤。jingzhou xu

try

{

m_pRecordset->Open("SELECT * FROM DemoTable",// 查詢DemoTable表中所有字段

m_pConnection.GetInterfacePtr(),  // 獲取庫接庫的IDispatch指針

adOpenDynamic,

adLockOptimistic,

adCmdText);

}

catch(_com_error *e)

{

AfxMessageBox(e->ErrorMessage());

}
(2)關閉結果集 m_pRecordset->Close();3.操作一個結果集(1)、遍歷(讀取)

a)、用pRecordset->adoEOF來判定數據庫指針是否已經移到結果集的末尾了;m_pRecordset->BOF判定是否 在第一條記錄前面: while(!m_pRecordset->adoEOF)

{

var = m_pRecordset->GetCollect("Name");

if(var.vt != VT_NULL)

strName = (LPCSTR)_bstr_t(var);

var = m_pRecordset->GetCollect("Age");

if(var.vt != VT_NULL)

strAge = (LPCSTR)_bstr_t(var);

m_AccessList.AddString( strName + " --> "+strAge );

m_pRecordset->MoveNext();

}b)、取得一個字段的值的辦法有兩種辦法一是//表示取得第0個字段的值 m_pRecordset->GetCollect("Name");或者 m_pRecordset->GetCollect(_variant_t(long(0));二是

pRecordset->get_Collect("COLUMN_NAME");或者 pRecordset->get_Collect(long(index));(2)、添加a)、調用m_pRecordset->AddNew();

b)、調用m_pRecordset->PutCollect();給每個字段賦值

c)、調用m_pRecordset->Update();確認(3)、修改

(4)、刪除

a)、把記錄指針移動到要刪除的記錄上,然后調用Delete(adAffectCurrent) try

{

// 假設刪除第二條記錄

m_pRecordset->MoveFirst();

m_pRecordset->Move(1);       

// 從0開始

m_pRecordset->Delete(adAffectCurrent); 

// 參數adAffectCurrent為刪除當前記錄

m_pRecordset->Update();

}

catch(_com_error *e)

{

AfxMessageBox(e->ErrorMessage());

}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 郁南县| 克拉玛依市| 扎兰屯市| 遵化市| 德昌县| 江门市| 罗江县| 尚志市| 黑水县| 新昌县| 邹城市| 阿合奇县| 怀化市| 宿迁市| 格尔木市| 永康市| 五台县| 车致| 小金县| 藁城市| 梁平县| 杂多县| 读书| 阜平县| 白城市| 玉溪市| 剑阁县| 吴桥县| 漳州市| 泸定县| 承德县| 大厂| 绥江县| 谢通门县| 手机| 岑溪市| 北川| 德庆县| 威信县| 开鲁县| 濮阳市|