ado訪問資料庫的最簡模型
阿新 • • 發佈:2018-11-07
環境:vc++ 6.0, MFC exe,
開始:
第一步: 在標頭檔案中找到 StdAfx.h,在 #endif 下面 新增
#import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","rsEOF")
第二步:在APP類裡。***App::InitInstance()函式中。 AfxEnableControlContainer();語句下插入:
if(!AfxOleInit())//這就是初始化COM庫 { AfxMessageBox("OLE初始化出錯!"); return FALSE; }
第三步:新建類(C++類,不基於其他類)
class Database { public: Database(); virtual ~Database(); //連線資料庫 BOOL OpenMDB(CString strPath); //關閉資料庫 void Close(); void Execute_sql(); //在資料庫內新建表 void Execute_sql2(); //插入指定欄位值 CString locaTime(); //獲得當前 年月日時分秒 public: _ConnectionPtr m_pConn; };
//全域性變數 CString TableName; Database::Database() { } Database::~Database() { } BOOL Database::OpenMDB(CString strPath) { //1 建立Connection物件 HRESULT nRet= m_pConn.CreateInstance(__uuidof(Connection)); if (FAILED(nRet)) { return FALSE; } //2 連線資料庫 CString strConn; strConn.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;",strPath); // AfxMessageBox(strConn); 這一句可以彈框,看看連線字串的內容 nRet=m_pConn->Open(_bstr_t(strConn),"","",-1); if (FAILED(nRet)) { return FALSE; } return TRUE; } void Database::Close() { m_pConn->Close(); } void Database::Execute_sql() { _variant_t RecordsAffected; //users是表名,這個可以用當前時間代替,表名必須以字母開頭。 //m_pConn->Execute("CREATE TABLE users(ID INTEGER, username TEXT, age INTEGER, birthday DATETIME)", &RecordsAffected, adCmdText); CString CreateSql; TableName = locaTime(); CreateSql.Format("CREATE TABLE n%s(ID INTEGER, username TEXT, age INTEGER, birthday DATETIME);", TableName); m_pConn->Execute((_bstr_t)CreateSql, &RecordsAffected, adCmdText); } void Database::Execute_sql2() { _variant_t RecordsAffected; CString ExecuteSql; ExecuteSql.Format("INSERT INTO n%s (age) VALUES (22);", TableName); m_pConn->Execute((_bstr_t)ExecuteSql, &RecordsAffected, adCmdText); //m_pConn->Execute("INSERT INTO users (age) VALUES (22)", &RecordsAffected, adCmdText); // INSERT INTO users (age) VALUES (22); } CString Database::locaTime() { /*得到當前系統時間*/ CTime ctime=CTime::GetCurrentTime(); /* 給AutoNewMDB ()備用*/ CString nowYear, nowMoon, nowDay, nowhour,nowmin,nowsec; nowYear =ctime.Format("%Y"); nowMoon =ctime.Format("%m"); nowDay =ctime.Format("%d"); nowhour =ctime.Format("%H"); nowmin =ctime.Format("%M"); nowsec =ctime.Format("%S"); return nowYear+nowMoon+nowDay+nowhour+nowmin+nowsec; }
呼叫部分:
#include "Database.h" //在CPP中包含這個標頭檔案,是因為只在這裡用到資料庫。
Database dbse;
CFileDialog dlg(TRUE);
if (IDCANCEL==dlg.DoModal())
{
return;
}
if (!dbse.OpenMDB(dlg.GetPathName()))
{
AfxMessageBox("開啟資料庫失敗!");
return;
}
else
{
AfxMessageBox("開啟資料庫成功!");
}
dbse.Execute_sql();
dbse.Execute_sql2();
AfxMessageBox("執行成功,現在去MDB檔案裡看看");