1. 程式人生 > >ado訪問資料庫的最簡模型

ado訪問資料庫的最簡模型

環境: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檔案裡看看");