Переглянути джерело

为mysql数据库添加支持:首先下载mysql odbc或mariadb odbc安装,安装成功后才能使ado连接得上mysql.

Jeff 7 роки тому
батько
коміт
6ae3bd06f5

+ 1 - 0
source/hook/WxAdoInterface/IWxAdoInterface.h

@@ -40,6 +40,7 @@ interface IWxAdoInterface:public IUnknown
 {
 public:
 	virtual DWORD InitializePool( 
+		IN LPCTSTR lpDBType,
 		IN LPCTSTR lpDBSource, 
 		IN CONST DWORD &dwDBPort, 
 		IN LPCTSTR lpDBAccount, 

+ 2 - 2
source/hook/WxAdoInterface/WxAdoImpl.cpp

@@ -115,9 +115,9 @@ void CWxAdoImpl::SolveDBError( IN CONST DWORD &dwError, IN LPVOID pDBConn)
 /*  ÈÕÆÚ£º;
 /*  ÄÚÈÝ£º;
 /************************************************************************/
-DWORD CWxAdoImpl::InitializePool( IN LPCTSTR lpDBSource, IN CONST DWORD &dwDBPort, IN LPCTSTR lpDBAccount, IN LPCTSTR lpPassWord, IN LPCTSTR lpDBName, IN CONST INT &nMinConn /* = 1 */, IN CONST INT &nMaxConn /* = 5 */ )
+DWORD CWxAdoImpl::InitializePool( IN LPCTSTR lpDBType, IN LPCTSTR lpDBSource, IN CONST DWORD &dwDBPort, IN LPCTSTR lpDBAccount, IN LPCTSTR lpPassWord, IN LPCTSTR lpDBName, IN CONST INT &nMinConn /* = 1 */, IN CONST INT &nMaxConn /* = 5 */ )
 {
-	return CWxAdoPool::GetInstance()->InitializePool(lpDBSource, dwDBPort, lpDBAccount, lpPassWord, lpDBName, nMinConn, nMaxConn);
+	return CWxAdoPool::GetInstance()->InitializePool(lpDBType, lpDBSource, dwDBPort, lpDBAccount, lpPassWord, lpDBName, nMinConn, nMaxConn);
 }
 
 /************************************************************************/

+ 1 - 0
source/hook/WxAdoInterface/WxAdoImpl.h

@@ -50,6 +50,7 @@ private:
 public:
 	// ³õʼ»¯ËùÓÐÁ¬½Ó;
 	DWORD InitializePool( 
+		IN LPCTSTR lpDBType,
 		IN LPCTSTR lpDBSource, 
 		IN CONST DWORD &dwDBPort, 
 		IN LPCTSTR lpDBAccount, 

+ 37 - 9
source/hook/WxAdoInterface/WxAdoPool.cpp

@@ -18,6 +18,7 @@ CWxAdoPool::CWxAdoPool()
 
 CWxAdoPool::~CWxAdoPool()
 {
+	m_strDBType.Empty();
 	m_strDBAccount.Empty();
 	m_strDBName.Empty();
 	m_strDBSource.Empty();
@@ -25,13 +26,14 @@ CWxAdoPool::~CWxAdoPool()
 	DestroyAllDBConnections();
 }
 
-DWORD CWxAdoPool::InitializePool(IN LPCTSTR lpDBSource, IN CONST DWORD &dwDBPort, IN LPCTSTR lpDBAccount, IN LPCTSTR lpPassWord, IN LPCTSTR lpDBName, IN CONST INT &nMinConn /* = 1 */, IN CONST INT &nMaxConn /* = 5 */)
+DWORD CWxAdoPool::InitializePool(IN LPCTSTR lpDBType, IN LPCTSTR lpDBSource, IN CONST DWORD &dwDBPort, IN LPCTSTR lpDBAccount, IN LPCTSTR lpPassWord, IN LPCTSTR lpDBName, IN CONST INT &nMinConn /* = 1 */, IN CONST INT &nMaxConn /* = 5 */)
 {
 	if ( !lpDBSource || lpDBSource[0] == _T('\0') || !lpDBName || lpDBName[0] == _T('\0') )
 	{
 		return 0;
 	}
 
+	m_strDBType = lpDBType;
 	m_strDBSource = lpDBSource;
 	m_dwDBPort = dwDBPort;
 	m_strDBAccount = lpDBAccount;
@@ -202,17 +204,43 @@ pAdoObj CWxAdoPool::InitAConnection()
 	TCHAR szConnString[MAX_PATH] = {0};
 	if (m_dwDBPort != 0)
 	{
-		if ( m_strDBAccount.IsEmpty() )
-			_stprintf_s(szConnString, MAX_PATH, DB_SW_CONN_WITH_PORT, m_strDBSource, m_dwDBPort,m_strDBName);
-		else
-			_stprintf_s(szConnString, MAX_PATH, DB_SS_CONN_WITH_PORT,m_strDBSource, m_dwDBPort, m_strDBName, m_strDBAccount, m_strPassWord);
+		if ( m_strDBType.CompareNoCase(_T("mssql")) == 0 )
+		{
+			if ( m_strDBAccount.IsEmpty() )
+				_stprintf_s(szConnString, MAX_PATH, DB_SW_CONN_WITH_PORT, m_strDBSource, m_dwDBPort,m_strDBName);
+			else
+				_stprintf_s(szConnString, MAX_PATH, DB_SS_CONN_WITH_PORT,m_strDBSource, m_dwDBPort, m_strDBName, m_strDBAccount, m_strPassWord);
+		}
+		else if (m_strDBType.CompareNoCase(_T("mysql")) == 0)
+		{
+			_stprintf_s(szConnString, MAX_PATH, _T("DRIVER=MariaDB ODBC 3.0 Driver;SERVER=%s;PORT=%d;DATABASE=%s;UID=%s;PWD=%s;"), m_strDBSource, m_dwDBPort, m_strDBName, m_strDBAccount, m_strPassWord);
+		}
+		else if (m_strDBType.CompareNoCase(_T("psql")) == 0)
+		{
+		}
+		else if (m_strDBType.CompareNoCase(_T("sqlite3")) == 0)
+		{
+		}
 	}
 	else
 	{
-		if ( m_strDBAccount.IsEmpty() )
-			_stprintf_s(szConnString, MAX_PATH, DB_SW_CONN_WITHOUT_PORT, m_strDBSource, m_strDBName);
-		else
-			_stprintf_s(szConnString, MAX_PATH, DB_SS_CONN_WITHOUT_PORT, m_strDBSource, m_strDBName, m_strDBAccount, m_strPassWord);
+		if ( m_strDBType.CompareNoCase(_T("mssql")) == 0 )
+		{
+			if ( m_strDBAccount.IsEmpty() )
+				_stprintf_s(szConnString, MAX_PATH, DB_SW_CONN_WITHOUT_PORT, m_strDBSource, m_strDBName);
+			else
+				_stprintf_s(szConnString, MAX_PATH, DB_SS_CONN_WITHOUT_PORT, m_strDBSource, m_strDBName, m_strDBAccount, m_strPassWord);
+		}
+		else if (m_strDBType.CompareNoCase(_T("mysql")) == 0)
+		{
+			_stprintf_s(szConnString, MAX_PATH, _T("DRIVER=MariaDB ODBC 3.0 Driver;SERVER=%s;PORT=3306;DATABASE=%s;UID=%s;PWD=%s;"), m_strDBSource, m_strDBName, m_strDBAccount, m_strPassWord);
+		}
+		else if (m_strDBType.CompareNoCase(_T("psql")) == 0)
+		{
+		}
+		else if (m_strDBType.CompareNoCase(_T("sqlite3")) == 0)
+		{
+		}
 	}
 
 	try

+ 2 - 0
source/hook/WxAdoInterface/WxAdoPool.h

@@ -22,6 +22,7 @@ class CWxAdoPool
 
 	// 引入的指针变量;
 	DWORD m_dwDBPort;
+	CString m_strDBType;
 	CString m_strDBSource;
 	CString m_strDBAccount;
 	CString m_strPassWord;
@@ -46,6 +47,7 @@ public:
 
 	// 初始化所有连接;
 	DWORD InitializePool( 
+		IN LPCTSTR lpDBType,
 		IN LPCTSTR lpDBSource, 
 		IN CONST DWORD &dwDBPort, 
 		IN LPCTSTR lpDBAccount, 

+ 2 - 1
source/hook/WxService/Global.cpp

@@ -27,7 +27,7 @@ namespace Global
 	TCHAR g_szDBAccount[MAX_PATH];				// 数据库登录用户;
 	TCHAR g_szDBPassWord[MAX_PATH];				// 数据库登录密码;
 	TCHAR g_szDBName[MAX_PATH];					// 数据库名称;	
-
+	TCHAR g_szDBType[MAX_PATH];					// 数据库类型:mysql、mssql、psql、sqlite3
 	DWORD g_dwDBPoolMaxCount = 1;						// 数据库连接池最大对象数;
 	DWORD g_dwDBPoolDef = 1;							// 数据库连接池默认对象数;
 
@@ -182,6 +182,7 @@ namespace Global
 		GetPrivateProfileString(_T("DatabaseInfo"), _T("dbPassWord"), _T(""), g_szDBPassWord, MAX_PATH, szIniPath);
 		GetPrivateProfileString(_T("DatabaseInfo"), _T("dbName"), _T(""), g_szDBName, MAX_PATH, szIniPath);
 
+		GetPrivateProfileString(_T("DatabaseInfo"), _T("dbType"), _T("mssql"), g_szDBType, MAX_PATH, szIniPath);
 		g_dwDBPoolMaxCount = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbpoolMaxObj"), 1, szIniPath);
 		g_dwDBPoolDef = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbpoolDef"), 1, szIniPath);
 		//g_dwSvrPort = GetPrivateProfileInt(_T("NetWorkInfo"), _T("TCPChatPort"), 0, szIniPath);

+ 1 - 1
source/hook/WxService/Global.h

@@ -56,7 +56,7 @@ namespace Global
 	extern TCHAR g_szDBAccount[MAX_PATH];			// 数据库登录用户;
 	extern TCHAR g_szDBPassWord[MAX_PATH];			// 数据库登录密码;
 	extern TCHAR g_szDBName[MAX_PATH];				// 数据库名称;	
-	
+	extern TCHAR g_szDBType[MAX_PATH];				// 数据库类型:mysql、mssql、psql、sqlite3
 	extern DWORD g_dwDBPoolMaxCount;				// 数据库连接池最大对象数;
 	extern DWORD g_dwDBPoolDef;						// 数据库连接池默认对象数;
 

+ 1 - 1
source/hook/WxService/WxService.cpp

@@ -22,7 +22,7 @@ void CALLBACK WorkStart()
 	{
 		// ³¢ÊÔ10´ÎÆô¶¯;
 		INT i = 10;
-		while (0 == g_pAdoPool->InitializePool(Global::g_szDBSource, Global::g_dwDBServerPort, Global::g_szDBAccount, Global::g_szDBPassWord, Global::g_szDBName, Global::g_dwDBPoolDef, Global::g_dwDBPoolMaxCount))
+		while (0 == g_pAdoPool->InitializePool(Global::g_szDBType, Global::g_szDBSource, Global::g_dwDBServerPort, Global::g_szDBAccount, Global::g_szDBPassWord, Global::g_szDBName, Global::g_dwDBPoolDef, Global::g_dwDBPoolMaxCount))
 		{
 			Sleep(5000);
 			if (i < 0)