c access mysql数据库_c语言可以连接access数据库??

这段代码展示了如何在C++中使用ADO库连接和操作Access数据库,包括打开、关闭数据库,执行SQL语句,以及处理数据库错误。通过`_ConnectionPtr`和`_RecordsetPtr`对象进行数据交互。
摘要由CSDN通过智能技术生成

展开全部

#import "C:\program files\common files\system\ado\msado15.dll " no_namespace rename( "EOF ", "adoEOF ")

//#import "c:\program files\common files\system\ado\msado15.dll " rename ( "EOF ", "adoEOF ") no_namespace

#define CREATEiNSTANCE(sp,riid) { HRESULT _hr =sp .CreateInstance( __uuidof( riid ) ); \

if (FAILED(_hr)) _com_issue_error(_hr); }

#define RsITEM(rs,x) ((rs-> Fields-> Item[_variant_t(x)]-> Value))

class CHmbAdoDB

{

public:

BOOL m_bOpen;

_ConnectionPtr m_DbConn;

CString m_ErrMsg;

CString m_SQLState;

long mSqlCode;

public:

void Cancel();

BOOL IsOpen();

void RollbackTrans();

void CommitTrans();

long BeginTrans();

void Close();

BOOL Open(LPCSTR lpszConnect);

BOOL Execute(LPCTSTR lpSQL);

void ProviderError();

CHmbAdoDB()

{

}

virtual ~CHmbAdoDB()

{

}

};

class CHmbAdoDBRs : public CObject

{

public:

_RecordsetPtr m_Rs;

public:

CHmbAdoDBRs();

virtual ~CHmbAdoDBRs();

BOOL Open( CHmbAdoDB *pDB, LPCSTR szSource,long option=-1);

void Close();

void GetRs(_variant_t x,_bstr_t &ret);

void GetRs(_variant_t x,CString &ret);

BOOL IsEOF();

BOOL IsOpen();

BOOL MoveNext();

BOOL MovePrev();

BOOL MoveFirst();

BOOL MoveLast();

};

#endif // !defined(AFX_RfidAdoDB_H__7C539954_1C62_47B6_AB6E_1A5BB73A67E5__INCLUDED_) truct InitOle

{

InitOle() { ::CoInitialize(NULL); }

~InitOle() { ::CoUninitialize(); }

} _init_InitOle_;

long mSqlCode;

BOOL CHmbAdoDB::Open(LPCSTR lpszConnect)

{

try

{

CREATEiNSTANCE(m_DbConn,Connection);

m_DbConn-> Open(lpszConnect, " ", " ", adModeUnknown );

}

catch( _com_error &e)

{

return FALSE;

}

catch(...)

{

return FALSE;

}

return TRUE;

}

void CHmbAdoDB::Close()

{

if( IsOpen() )

{

m_DbConn-> Close();

}

}

long CHmbAdoDB::BeginTrans()

{

return m_DbConn-> BeginTrans();

}

void CHmbAdoDB::CommitTrans()

{

m_DbConn-> CommitTrans();

}

void CHmbAdoDB::RollbackTrans()

{

m_DbConn-> RollbackTrans();

}

void CHmbAdoDB::Cancel()

{

m_DbConn-> Cancel();

}

BOOL CHmbAdoDB::IsOpen()

{

return ( (m_DbConn-> GetState() != 0) ? TRUE : FALSE );

}

BOOL CHmbAdoDB::Execute(LPCTSTR lpSQL)

{

if (!IsOpen())

{

AfxMessageBox( "Network error, Database do not open. ");

return FALSE;

}

CString strSQL(lpSQL);

strSQL.TrimLeft();

strSQL.TrimRight();

try

{

m_DbConn-> Execute(_bstr_t(strSQL), NULL, adExecuteNoRecords);

}

catch( _com_error &e)

{

return FALSE;

}

catch(...)

{

return FALSE;

}

return TRUE;

}

void CHmbAdoDB::ProviderError()

{

// Print Provider Errors from Connection object.

// pErr is a record object in the Connection 's Error collection.

ErrorPtr pErr = NULL;

if( (m_DbConn-> Errors-> Count) > 0)

{

long nCount = m_DbConn-> Errors-> Count;

// Collection ranges from 0 to nCount -1.

for(long i = 0; i < nCount; i++)

{

pErr = m_DbConn-> Errors-> GetItem(i);

mSqlCode = pErr-> NativeError;

m_ErrMsg.Format( "SQLCODE : %ld\t%s ",mSqlCode, LPCTSTR(pErr-> Description));

m_SQLState.Format( "%s ",(char*)pErr-> SQLState);

printf( "%s // %s\n ",m_SQLState,m_ErrMsg);

}

}

m_DbConn-> Errors-> Clear();

}

CHmbAdoDBRs::CHmbAdoDBRs( )

{

}

CHmbAdoDBRs::~CHmbAdoDBRs()

{

}

BOOL CHmbAdoDBRs::Open( CHmbAdoDB *pDB, LPCSTR szSource,long option )

{

CString strSQL;

strSQL = CString(szSource);

strSQL.TrimLeft();

strSQL.TrimRight();

_variant_t vRecsAffected(0L);

// CREATEiNSTANCE( m_Rs,Recordset) ;

// m_Rs-> PutRefActiveConnection( pDB-> m_DbConn );

try

{

m_Rs = pDB-> m_DbConn-> Execute(_bstr_t(strSQL),

&vRecsAffected,

adOptionUnspecified);

m_Rs-> AddRef();

// m_Rs-> Open(szSource, vtMissing, adOpenKeyset, adLockBatchOptimistic, adOptionUnspecified);

// m_Rs-> Open(szSource, vtMissing, adOpenKeyset, adLockReadOnly, option);

// m_Rs-> Open(szSource,pDB-> m_DbConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic, adCmdText);

}

catch( _com_error &e)

{

//ErrorMessage();

m_Rs-> Close();

m_Rs-> Release();

return FALSE;

}

catch(...)

{

m_Rs-> Close();

m_Rs-> Release();

return FALSE;

}

return TRUE;

}

void CHmbAdoDBRs::Close()

{

m_Rs-> Close();

m_Rs-> Release();

}

void CHmbAdoDBRs::GetRs(_variant_t x,_bstr_t &ret)

{

ret = (m_Rs-> Fields-> Item[x]-> Value);

}

void CHmbAdoDBRs::GetRs(_variant_t x,CString &ret)

{

_bstr_t retVal;

try{

retVal = (m_Rs-> Fields-> Item[x]-> Value);

}

catch(...){

ret = " ";

return;

}

ret = CString((char*) retVal);

}

BOOL CHmbAdoDBRs::IsEOF()

{

return m_Rs-> adoEOF;

}

BOOL CHmbAdoDBRs::IsOpen()

{

return ( (m_Rs-> GetState() != 0) ? TRUE : FALSE );

}

BOOL CHmbAdoDBRs::MoveNext() { return (FAILED(m_Rs-> MoveNext()) ? FALSE : TRUE ); }

BOOL CHmbAdoDBRs::MovePrev() { return (FAILED(m_Rs-> MovePrevious()) ? FALSE : TRUE ); }

BOOL CHmbAdoDBRs::MoveFirst() { return (FAILED(m_Rs-> MoveFirst()) ? FALSE : TRUE ) ; }

BOOL CHmbAdoDBRs::MoveLast() { return (FAILED(m_Rs-> MoveLast()) ? FALSE : TRUE ) ; }

以上为一个ADO的封装类.

c语言如何连接32313133353236313431303231363533e78988e69d8331333332636362access数据库

现在一般是用ADO的方法.

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值