在C ++中,如何建立SQL连接以在SQL数据库中存储数据?
答案 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等。非常容易使用。
答案 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;
}