VC连接SqlServer,Access,Oracle数据库
#include <windows.h>
#include <stdio.h>
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename( "EOF", "adoEOF ")
enum DateSourceType {SqlServer,Access,Oracle};
class ADODB
{
public:
ADODB(void);
~ADODB(void);
private:
char * strConnect;
int _DateSourceType;
char * _ServerIP;
char * _DataBase;
char * _UserID;
char * _Password;
char * _DBFilePath;
public:
_ConnectionPtr m_Connection;
_RecordsetPtr m_RecordSet;
void MakeConnectStrSqlServer(char * ServerIP,char * DataBase,char * UserID, char * Password);
void MakeConnectStrAccess(char * DBFilePath);
void MakeConnectStrOracle(char * ServerIP,char * DataBase,char * UserID,char * Password);
void OpenConnection();
_RecordsetPtr& GetRecordSet(_bstr_t sql);
BOOL ExecuteSql(_bstr_t sql);
void ExitConnection();
void TestADODB(char * TableName);
};
ADODB::ADODB(void)
{
CoInitialize(NULL);
}
ADODB::~ADODB(void)
{
CoUninitialize();
}
void ADODB::MakeConnectStrSqlServer(char * ServerIP,char * DataBase,char * UserID, char * Password)
{
_ServerIP=ServerIP;
_DataBase=DataBase;
_UserID=UserID;
_Password=Password;
_DateSourceType=SqlServer;
//创建connection连接对象
m_Connection.CreateInstance("ADODB.Connection");
//设置连接字符串,使用前需要赋值
char * strConnect=(char *)calloc(1024,sizeof(char));
sprintf(strConnect,"server=%s,database=%s",ServerIP,DataBase);
m_Connection->Provider="SQLOLEDB.1";
m_Connection->Open(strConnect,UserID,Password,adModeUnknown);
}
void ADODB::MakeConnectStrAccess(char * DBFilePath)
{
_DBFilePath=DBFilePath;
_DateSourceType=Access;
m_Connection.CreateInstance("ADODB.Connection");
char * strConnect=(char *)calloc(1024,sizeof(char));
//针对Access数据库的连接字符串,请相应修改
sprintf(strConnect,"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Mode=ReadWrite;Persist Security Info=False",DBFilePath);
m_Connection->Open(strConnect,"","",adModeUnknown);
}
void ADODB::MakeConnectStrOracle(char * ServerIP,char * DataBase,char * UserID, char * Password)
{
_ServerIP=ServerIP;
_UserID=UserID;
_Password=Password;
_DataBase=DataBase;
_DateSourceType=Oracle;
//′创建connection连接对象
m_Connection.CreateInstance("ADODB.Connection");
//设置连接字符串,使用前需要赋值
char * strConnect=(char *)calloc(1024,sizeof(char));
//没有配置oracle客户端情况下ado连接字符串,通过测试
sprintf(strConnect,"Provider=OraOLEDB.Oracle.1;User ID=%s;Password=%s;Persist Security Info=True;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=%s)(PORT=1521))(CONNECT_DATA=(SERVER=default)(SERVICE_NAME=%s)))",_UserID,_Password,_ServerIP,_DataBase);//DataBase为SID
// 配置好了oracle客户端 情况下ado连接字符串,通过测试
// sprintf(strConnect,"Provider=OraOLEDB.Oracle.1;User ID=%s;Password=%s;Persist Security Info=True;server=%s;Data Source=%s",UserID,_Password,_ServerIP,_DataBase);//DataBase=本地服务名
m_Connection->Open(strConnect,"","",adConnectUnspecified);
}
void ADODB::OpenConnection()
{
switch(_DateSourceType)
{
case SqlServer:
MakeConnectStrSqlServer(_ServerIP,_DataBase,_UserID,_Password);
break;
case Access:
MakeConnectStrAccess(_DBFilePath);
break;
case Oracle://需要安装Oracle Client
MakeConnectStrOracle(_ServerIP,_DataBase,_UserID,_Password);
break;
default:
break;
}
}
_RecordsetPtr& ADODB::GetRecordSet(_bstr_t sql)
{
if(m_Connection == NULL)
{
OpenConnection();
}
try
{
m_RecordSet.CreateInstance(__uuidof(Recordset));
m_RecordSet->Open(sql,m_Connection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_error e)
{
m_RecordSet=NULL;
}
return m_RecordSet;
}
BOOL ADODB::ExecuteSql(_bstr_t sql)
{
bool ExecuteFlag=true;
_variant_t affect;
if(m_Connection == NULL)
{
OpenConnection();
}
try
{
m_Connection->Execute(sql,NULL,adCmdText);
}
catch(_com_error e)
{
ExecuteFlag= FALSE;
}
return ExecuteFlag;
}
void ADODB::ExitConnection()
{
if(m_RecordSet != NULL)
{
m_RecordSet->Close();
}
m_Connection->Close();
}
void ADODB::TestADODB(char * TableName)
{
char * Sql=(char *)calloc(256,sizeof(char));
sprintf(Sql,"select * from [%s]",TableName);
GetRecordSet(Sql);
int ColmNum=m_RecordSet->Fields->GetCount();
for(int j=0;j<ColmNum;j++)
{
printf("%s\t",(char *)(_bstr_t)m_RecordSet->Fields->GetItem(long(j))->GetName());
}
while(m_RecordSet->adoEOF==0)
{
printf("\n");
for(int j=0;j<ColmNum;j++)
{
FieldPtr pField=m_RecordSet->Fields->GetItem(long(j));
DataTypeEnum FieldType=pField->GetType();
_variant_t TheV=m_RecordSet->GetCollect(pField->GetName());
if(TheV.vt!=VT_NULL)
switch(FieldType)
{
case 2:
case 3:
printf("%d\t",TheV.lVal);
break;
case 129:
printf("%s\t",(LPCTSTR)(_bstr_t)TheV);
break;
default:
printf("%s\t",(LPCTSTR)(_bstr_t)TheV);
break;
}
}
printf("\n");
m_RecordSet->MoveNext();
}
ExitConnection();
}
void main()
{
ADODB MyDB;
//测试SqlServer
//MyDB.MakeConnectStrSqlServer("127.0.0.1","TestDataBase","sa","sa");
//MyDB.TestADODB("TestTable");
//测试Access数据库
// MyDB.MakeConnectStrAccess("a.mdb");
// MyDB.TestADODB("test");
//测试Oracle
MyDB.MakeConnectStrOracle("10.0.0.139","orcl","scott","tigger");
MyDB.TestADODB("salgrade");
}

浙公网安备 33010602011771号