如何通过C ++创建数据库连接

时间:2008-11-19 06:03:05

标签: c++

在C ++中,如何建立SQL连接以在SQL数据库中存储数据?

5 个答案:

答案 0 :(得分:3)

如果您的目标是Windows,则可能需要使用ODBC。

答案 1 :(得分:3)

你应该看看传统上存在数据库的C预处理器(postgres为ecpg,oracle为Pro*C ...允许你直接在源文件中嵌入SQL)或{ {3}}用于mysql。 ECPG将使用C ++,这对于其他一些预处理器来说并非如此......

答案 2 :(得分:1)

您可以尝试使用SQLite作为数据库的wxSqlite。这为您提供了一个开源的连接头/ c ++文件。

一般而言 - 您应该获得某种为您提供所需功能的库。所有主要数据库供应商都应至少提供一个C库。大多数情况下,你会得到一个C ++库或C语言包装器。

答案 3 :(得分:0)

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

http://www.sqlapi.com/

答案 4 :(得分: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;
}