首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问在C语言中,怎么利用ODBC连接数据库

2012-03-07 
请教在C语言中,如何利用ODBC连接数据库?请教在C语言中,如何利用ODBC连接数据库?网上查了一下,说使用ODBCAP

请教在C语言中,如何利用ODBC连接数据库?
请教在C语言中,如何利用ODBC连接数据库?
网上查了一下,说使用ODBC   API可以解决,但是不知道该怎么做。
哪位高手能提供个例子或者资料也可以。

[解决办法]

< < CPP > >
#import "C:\Program Files\Common Files\System\ado\msado15.dll " no_namespace rename( "EOF ", "EndOfFile ") rename( "BOF ", "FirstOfFile ")
#include <objbase.h>
#include "CDataBase.h "

DataBase::DataBase()
{
CoInitialize(NULL);
m_pConnection = NULL;
m_pCommand = NULL;
m_pConnection.CreateInstance(__uuidof(Connection));
m_res.CreateInstance(__uuidof(Recordset));
}

DataBase::~DataBase()
{
CloseDB();
if(m_res-> GetState() == adStateOpen)
m_res-> Close();
m_res.Release();
m_res = NULL;
m_pConnection.Release();
m_pConnection = NULL;
CoUninitialize();
}

_ConnectionPtr& DataBase::GetConnection()
{
return m_pConnection;
}

bool DataBase::OpenDB( char *pContStr, char *pSbName, char *pSbPw )
{
try
{
if(m_pConnection-> State)
return TRUE;
// 打开本地Access库text.mdb
m_pConnection-> Open( (_bstr_t)pContStr, pSbName, pSbPw, adModeUnknown );
if( m_pConnection-> State != adStateOpen )
return FALSE;
m_pConnection-> put_ConnectionTimeout(long(10));//设置超时
m_pConnection-> put_CommandTimeout(long(25));

m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand-> ActiveConnection = m_pConnection;
strcpy( m_cConstr, pContStr );
strcpy( m_cUserName, pSbName );
strcpy( m_cPassword, pSbPw );

m_bOpenType = TRUE;
}
catch(_com_error e)
{
return FALSE;
}
return TRUE;
}


bool DataBase::OpenDB( char *pContStr )
{
try
{
if(m_pConnection-> State)
return TRUE;

m_pConnection-> ConnectionString= "File Name=.\\DBConn.udl ";
m_pConnection-> PutConnectionTimeout(10);
m_pConnection-> PutCommandTimeout(25);

m_pConnection-> Open( " ", " ", " ",NULL);

if( m_pConnection-> State != adStateOpen )
return FALSE;

m_bOpenType = FALSE;
m_pCommand.CreateInstance(__uuidof(Command));
m_pCommand-> ActiveConnection = m_pConnection;
strcpy( m_cConstr, pContStr );
}
catch(_com_error e)
{
return FALSE;
}
return TRUE;
}

VOID DataBase::CloseDB()
{
if(m_pConnection==NULL) return;
if(IsOpen())
m_pConnection-> Close();
}

bool DataBase::Execute( char *pSqlStr )
{
if(!IsOpen()) return FALSE;
try
{
m_pConnection-> Execute( pSqlStr,&rec_affected,0 );
}
catch(_com_error e)
{
return FALSE;
}
return TRUE;
}

bool DataBase::NoneRetOpen( char *pSqlStr )
{
if(!IsOpen()) return FALSE;

if(m_res-> GetState() == adStateOpen)
m_res-> Close();
try
{
m_res-> Open(pSqlStr,m_pConnection.GetInterfacePtr(),adOpenForwardOnly ,adLockReadOnly,adCmdText);
}
catch(_com_error e)
{
return FALSE;
}
return TRUE;
}

bool DataBase::CommandPro( char *pProName )
{
if(!IsOpen()) return FALSE;
try
{
m_pCommand-> CommandText = pProName;
m_pCommand-> Execute(NULL,NULL, adCmdText);
}
catch(_com_error *e)


{
MessageBox( NULL, e-> ErrorMessage(), " ", MB_OK );
return FALSE;
}
return TRUE;
}
/*
bool DataBase::CommandPro( char *pProName )
{
if(!IsOpen()) return FALSE;
try
{
m_pCommand-> CommandText = pProName;
m_pCommand-> Execute(NULL,NULL, adCmdText);
}
catch(_com_error *e)
{
MessageBox( NULL, e-> ErrorMessage(), " ", MB_OK );
return FALSE;
}
return TRUE;
}
*/

bool DataBase::IsOpen()
{
try
{
return (m_pConnection != NULL && (m_pConnection-> State & adStateOpen));
}
catch(_com_error e)
{
return FALSE;
}
}

void DataBase::REOpen()
{
try
{
if (m_pConnection-> State != adStateOpen)
m_pConnection-> Open( m_cConstr, m_cUserName, m_cPassword, adModeUnknown);
}
catch(_com_error e)
{
}
}

bool DataBase::GetData( char *pSqlStr ,_RecordsetPtr &res )
{
if(!IsOpen()) return FALSE;

if(res-> GetState() == adStateOpen)
res-> Close();
try
{
res-> Open(pSqlStr,m_pConnection.GetInterfacePtr(),adOpenForwardOnly ,adLockReadOnly,adCmdText);
}
catch(_com_error e)
{
return FALSE;
}
return TRUE;
}
[解决办法]
http://www.easysoft.com/developer/languages/c/odbc_tutorial.html
[解决办法]
自己去msdn主页看:
http://msdn2.microsoft.com/en-us/library/ms710252.aspx

热点排行