vc mysqlデータベースに接続する方法
この間のプロジェクトではmysqlデータベースを使用していましたが、その接続方法は2つあります.1つはデータベースに付属するAPIで、もう1つはADOで接続されています.
今回のプロジェクト用のmysqlデータベースは一時的なもので、後でMSSQLに変更される可能性がありますので、mysqlで持参したAPI接続で移植性が悪い場合はADOに変更し、その場合は文字列接続値を変更すればよいのです.
実はADO接続の底も呼び出されたODBC駆動で接続するので、データベース対応のODBC駆動をダウンロードする必要があります.他の人は秘本が対応する必要があると言っています.そうしないと接続できません.私はあまりテストをしていません.自分で使っている6.0バージョンです.だから、公式サイトにmysql-connector-odbc-5.3.4-winx 64バージョンをダウンロードしました.そして、対応する文字列は次の通りです.
実測は接続に成功した.
次は自分が書いた超簡単なクラスを放します.
実装:
このコードの実行プラットフォームはWIN 7で、私はそれをXPの上で実行する時、無効なポインタを提示して、ネット上でプラットフォームの互換性の問題を調べて、他のWIN 7コンピュータの上で正常に実行することができます.だから気にしないで、解决の小さい仲间があって、下の方法を提供することができて、ありがとうございます!
今回のプロジェクト用のmysqlデータベースは一時的なもので、後でMSSQLに変更される可能性がありますので、mysqlで持参したAPI接続で移植性が悪い場合はADOに変更し、その場合は文字列接続値を変更すればよいのです.
実はADO接続の底も呼び出されたODBC駆動で接続するので、データベース対応のODBC駆動をダウンロードする必要があります.他の人は秘本が対応する必要があると言っています.そうしないと接続できません.私はあまりテストをしていません.自分で使っている6.0バージョンです.だから、公式サイトにmysql-connector-odbc-5.3.4-winx 64バージョンをダウンロードしました.そして、対応する文字列は次の通りです.
driver={MySQL ODBC 5.3 ANSI Driver};Server=localhost;DATABASE=*;USER=*;PASSWORD=*;OPTION=3;
実測は接続に成功した.
次は自分が書いた超簡単なクラスを放します.
#pragma once
#import <C:\Program Files\Common Files\System\ADO\msado15.dll> no_namespace rename("EOF", "adoEOF")
// #import "msado15.DLL" rename_namespace("ADOWE") rename("EOF","adoEOF")
// using namespace ADOWE;
class CAdoDatabase
{
public:
CAdoDatabase(void);
public:
~CAdoDatabase(void);
public:
//BOOL Connect(CString csConnectStr,CString csUser,CString csPasswd);
//
BOOL Connect(CString csConnectStr);
//
BOOL DisConn();
//
BOOL Execute(CString csSQL);
//
BOOL IsConn();
//
int QueryDataForRecord(CString csSql,CStringArray& csa);
private:
_ConnectionPtr m_pConn;
_RecordsetPtr m_pRecord;
};
実装:
BOOL CAdoDatabase::Connect(CString csConnectStr)
{
HRESULT hr;
try
{
hr = m_pConn.CreateInstance(__uuidof(Connection));
//hr = m_pConn.CreateInstance("ADODB.Connection");
//m_pConn->Open(_bstr_t(csConnectStr),"","",ADODB::adConnectUnspecified);
m_pConn->Open(_bstr_t(csConnectStr),"","",adModeUnknown);
return TRUE;
}
catch (_com_error e)
{
CString csErrorMsg;
csErrorMsg.Format(_T(" :%s"),e.ErrorMessage());
AfxMessageBox(csErrorMsg,MB_OK+MB_ICONERROR);
return FALSE;
}
}
BOOL CAdoDatabase::DisConn()
{
if (m_pConn->State)
{
m_pConn->Close();
m_pConn = NULL;
return TRUE;
}
return FALSE;
}
BOOL CAdoDatabase::Execute(CString csSQL)
{
try
{
_variant_t RecordsAffected;
m_pConn->Execute((_bstr_t)csSQL,&RecordsAffected,adCmdText);
return TRUE;
}catch(_com_error e)
{
CString csMsg;
csMsg.Format(_T(" SQL :%s"),e.ErrorMessage());
AfxMessageBox(csMsg,MB_OK+MB_ICONERROR);
return FALSE;
}
}
int CAdoDatabase::QueryDataForRecord(CString csSql, CStringArray &csa)
{
try
{
m_pRecord.CreateInstance(__uuidof(Recordset));
//m_pRecord->Open((_bstr_t)csSql,m_pConn.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
m_pRecord->Open((_bstr_t)csSql,_variant_t((IDispatch *)m_pConn, true),adOpenKeyset,adLockReadOnly,adCmdText);
int nCount;
int nRowCount = 0;
nCount = m_pRecord->Fields->GetCount();
_variant_t vt;
while (!m_pRecord->adoEOF)
{
for (int i=0; i<nCount; i++)
{
vt =m_pRecord->Fields->GetItem(long(i))->GetValue();
if (vt.vt == VT_NULL)
{
vt = _T("");
}
csa.Add(vt);
}
nRowCount++;
m_pRecord->MoveNext();
}
m_pRecord->Close();
return nRowCount;
}catch(_com_error e)
{
CString csMsg;
csMsg.Format(_T(" :%s"),e.ErrorMessage());
AfxMessageBox(csMsg,MB_OK+MB_ICONERROR);
return -1;
}
}
このコードの実行プラットフォームはWIN 7で、私はそれをXPの上で実行する時、無効なポインタを提示して、ネット上でプラットフォームの互換性の問題を調べて、他のWIN 7コンピュータの上で正常に実行することができます.だから気にしないで、解决の小さい仲间があって、下の方法を提供することができて、ありがとうございます!