2008-11-19 43 views

回答

3

你應該看看與數據庫traditionaly存在Ç預處理器(ecpg Postgres的,Pro*C甲骨文......它可以讓你直接嵌入SQL直接在你的源文件)或orginal system爲MySQL。 ECPG將使用C++,這是/不是一些其他預處理器的情況...

3

如果您的目標是Windows,那麼您可能需要使用ODBC。

+0

而不僅僅是Windows - ODBC可在Unix和衍生品了。 – 2008-11-19 06:16:19

1

你可以嘗試使用SQLite作爲數據庫的wxSqlite。這爲您提供了一個開源連接頭文件/ C++文件來開始。

一般來說 - 你應該得到某種圖書館,爲你提供所需的功能。所有主要的數據庫供應商都應該提供至少一個C庫。大多數情況下,你得到一個C++庫或C包裝器。

0

使用SQLAPI ++ - 它是跨平臺的,支持MS SQL Server,Oracle,Postgres等。非常容易使用。

http://www.sqlapi.com/

+0

和它的共享軟件 – 2008-11-19 07:55:13

0

如果針對Windows,你可以隨時使用的進口能力。

#import "c:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "EndOfFile") 

然後你可以做一個包裝來處理SQL。

小例子,只是爲了打開緊密連接

// H 
class CExtAdoDatabase 
{ 

public: 
    CExtAdoDatabase(const char* p_cConnectString="", const char* p_cUsername="", const char* p_cPwd=""); 
    virtual ~CExtAdoDatabase(); 

    bool Open(const char* p_cConnectString="", const char* p_cUsername="", const char* p_cPwd=""); 
    bool Close(); 



private: 
    HRESULT _hInitRes; 
    bool _bIsValid; 

    _ConnectionPtr *_p_pConnection; 
}; 



// CPP 
CExtAdoDatabase::CExtAdoDatabase(const char* p_cConnectString, const char* p_cUsername, const char* p_cPwd) : _hInitRes(CoInitialize(NULL)) 
{ 
    _p_pConnection = new _ConnectionPtr("ADODB.Connection"); 

    if(FAILED(_hInitRes)) 
      _bIsValid = false; 
    else 
    { 
     _bIsValid = true; 
     (*_p_pConnection)->ConnectionTimeout=0; 
     (*_p_pConnection)->CommandTimeout=0; 

     if(p_cConnectString != NULL && strlen(p_cConnectString)) 
     { 
      _bstr_t scs(p_cConnectString); 
      _bstr_t susr(p_cUsername); 
      _bstr_t spwd(p_cPwd); 
      (*_p_pConnection)->Open(scs, susr, spwd, NULL); 
     } 
    } 
} 
CExtAdoDatabase::~CExtAdoDatabase() 
{ 
    Close(); 
    delete _p_pConnection; 
    CoUninitialize(); 
} 

bool CExtAdoDatabase::Open(const char* p_cConnectString, const char* p_cUsername, const char* p_cPwd) 
{ 
    if(_bIsValid) 
    { 
     _bstr_t scs(p_cConnectString); 
     _bstr_t susr(p_cUsername); 
     _bstr_t spwd(p_cPwd); 
     return ((*_p_pConnection)->Open(scs, susr, spwd, NULL) == S_OK); 
    } 
    else 
     return false; 
} 

bool CExtAdoDatabase::Close() 
{ 
    if(_bIsValid) 
    { 
     if((*_p_pConnection)->GetState() == adStateOpen) 
      return !!(*_p_pConnection)->Close(); 
     else 
      return true; 
    } 
    else 
     return false; 
}