#include "StdAfx.h"
#include "WxAdoImpl.h"
#include "Global.h"
#include "WxAdoPool.h"


#define GETDBPTR(dwTimeOut) \
pAdoObj pObj = NULL;\
CAdoConnGuard tagConnGuard(pObj, dwTimeOut);\
if ( pObj == NULL)\
	return FALSE\

enum UserLogInStatus
{
	USER_LOGIN		= 1,				// 登录成功;
	USER_PW_MISTAKE = 2,				// 密码错误;
	USER_NULL		= 0					// 没有用户;
};

CWxAdoImpl* CWxAdoImpl::m_pInstance = NULL;
CWxAdoImpl::CWxAdoImpl(void):m_nRef(0),m_nObjRef(0)
{

}

CWxAdoImpl::~CWxAdoImpl(void)
{
}

ULONG CWxAdoImpl::AddRef()
{
	InterlockedIncrement( &m_nRef ); //增加引用计数;
	return m_nRef;
}

ULONG CWxAdoImpl::Release()
{
	InterlockedDecrement( &m_nRef ); //减少引用计数;
	//如果为0，删除对象
	if( m_nRef == 0 )
	{
		delete this;
	}
	return m_nRef;
}

HRESULT CWxAdoImpl::QueryInterface(REFIID refiid, void **ppvObject)
{
	if (IID_IUnknown == refiid)
	{
		*ppvObject = this;
	}
	else if (IID_IWxAdoInterface == refiid)
	{
		*ppvObject = (IWxAdoInterface*)this;
	}
	else 
	{
		*ppvObject = NULL;
		return E_NOINTERFACE;
	}
	((IUnknown*)(*ppvObject))->AddRef();

	return NOERROR;
}

/************************************************************************/
/*  函数：[9/25/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
void CWxAdoImpl::SolveDBError( IN CONST DWORD &dwError, IN LPVOID pDBConn)
{
	switch(dwError)
	{
	//case SQL_ERROR://这个错误比较难精确判断问题;
	case ERROR_PIPE_NOT_CONNECTED:
	case WSAECONNRESET:
	case WSAECONNABORTED:
	{
		pAdoObj pObj = (pAdoObj)pDBConn;
		CWxAdoPool::GetInstance()->CloseBusyConnection(pObj);
#if _DEBUG
		OutputDebugString(_T("关闭数据库连接\n"));
#endif
	}
		break;
	default:
		break;
	}
}

//template<typename T>
//BOOL CWxAdoImpl::GetFiedValue(IN _RecordsetPtr rst, IN LPCTSTR lpFiedName, T &value)
//{
//	typeid(value);
//	_variant_t var = rst->GetCollect(lpFiedName);
	//switch(var.vt)
	//{
	//case VT_EMPTY:
	//	break;            
	//case VT_NULL:
	//	break;             
	//case VT_I2://2 byte signed int
	//	value = var.iVal;
	//	break;               
	//case VT_I4://4 byte signed int
	//	value = var.iVal;
	//	break;               
	//case VT_R4://4 byte real
	//	value = var.fltVal;
	//	break;               
	//case VT_R8://8 byte real
	//	value = var.dblVal;
	//	break;               
	//case VT_CY://currency
	//	break;               
	//case VT_DATE:
	//	{
	//		COleDateTime dt(var);
	//		value = dt.Format(_T("%Y-%m-%d %H:%M:%S"));
	//	}
	//	break;             
	//case VT_BSTR://OLE Automation string
	//	value = _bstr_t(var.bstrVal);
	//	break;             
	//case VT_DISPATCH://IDispatch *
	//	break;         
	//case VT_ERROR://SCODE
	//	break;            
	//case VT_BOOL://True=-1, False=0
	//	value = var.boolVal;
	//	break;             
	//case VT_VARIANT://VARIANT *
	//	break;          
	//case VT_UNKNOWN://IUnknown *
	//	break;          
	//case VT_DECIMAL://16 byte fixed point
	//	break;          
	//case VT_RECORD://user defined type
	//	break;           
	//case VT_I1:	// signed char
	//	value = var.pcVal;
	//	break;               
	//case VT_UI1://unsigned char
	//	value = var.bVal;
	//	break;              
	//case VT_UI2://unsigned short
	//	value = var.uiVal;
	//	break;              
	//case VT_UI4://unsigned long
	//	value = var.uiVal;
	//	break;              
	//case VT_I8://signed 64-bit int
	//	value = var.lVal;
	//	break;               
	//case VT_UI8://unsigned 64-bit int
	//	value = var.ulVal;
	//	break;              
	//case VT_INT://signed machine int
	//	value = var.intVal;
	//	break;              
	//case VT_UINT://unsigned machine int
	//	value = var.uintVal;
	//	break;             
	//case VT_INT_PTR://signed machine register size width
	//	break;          
	//case VT_UINT_PTR://unsigned machine register size width
	//	break;         
	//case VT_VOID://C style void
	//	break;             
	//case VT_HRESULT://Standard return type
	//	break;          
	//case VT_PTR://pointer type
	//	break;              
	//case VT_SAFEARRAY://(use VT_ARRAY in VARIANT)
	//	break;        
	//case VT_CARRAY://C style array
	//	break;           
	//case VT_USERDEFINED://user defined type
	//	break;      
	//case VT_LPSTR://null terminated string
	//	break;            
	//case VT_LPWSTR://wide null terminated string
	//	break;           
	//case VT_FILETIME://FILETIME
	//	break;         
	//case VT_BLOB://Length prefixed bytes
	//	break;             
	//case VT_STREAM://Name of the stream follows
	//	break;           
	//case VT_STORAGE://Name of the storage follows
	//	break;          
	//case VT_STREAMED_OBJECT://Stream contains an object
	//	break;  
	//case VT_STORED_OBJECT://Storage contains an object
	//	break;    
	//case VT_VERSIONED_STREAM://Stream with a GUID version
	//	break; 
	//case VT_BLOB_OBJECT://Blob contains an object
	//	break;      
	//case VT_CF://Clipboard format
	//	break;               
	//case VT_CLSID://A Class ID
	//	break;            
	//case VT_VECTOR://simple counted array
	//	break;           
	//case VT_ARRAY://SAFEARRAY*
	//	break;            
	//case VT_BYREF://void* for local use
	//	break;            
	//case VT_BSTR_BLOB://Reserved for system use
	//	break;        
	//default:
	//	value = var.iVal;
	//}	
//	return TRUE;
//}

/************************************************************************/
/*  函数：[9/25/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
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(lpDBType, lpDBSource, dwDBPort, lpDBAccount, lpPassWord, lpDBName, nMinConn, nMaxConn);
}

/************************************************************************/
/*  函数：[9/25/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
void CWxAdoImpl::ReleasePool()
{
	CWxAdoPool *pObj = CWxAdoPool::GetInstance();
	if ( pObj )
	{
		pObj->ReleasePool();
		delete pObj;
		pObj = NULL;
	}
}

/************************************************************************/
/*  函数：[9/25/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
BOOL CWxAdoImpl::ExecuteSQL( IN LPCTSTR lpExcuteSQL, IN CONST DWORD &dwTimeOut /* = 30000 */ )
{
	GETDBPTR(dwTimeOut);

	try
	{
		if ( lpExcuteSQL == NULL || pObj == NULL )
			return FALSE;

		pObj->pCommand->CommandText = _bstr_t(lpExcuteSQL);
		// 执行SQL语句，返回记录集
		pObj->pCommand->Execute(NULL, NULL, adCmdText);
	}
	catch (_com_error &e)
	{
		_bstr_t bstrSource(e.Source());
		_bstr_t bstrDescription(e.Description());
		SolveDBError(e.Error(), pObj);
		Global::WriteTextLog(_T("SQL出错：%08lx,%s,%s,%s"), e.Error(), e.ErrorMessage(), (TCHAR*)bstrSource, (TCHAR*)bstrDescription);
		return FALSE;
	}

	return TRUE;
}

/************************************************************************/
/*  函数：[9/25/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
BOOL CWxAdoImpl::IsUserExist( IN LPCTSTR lpPhone, IN LPCTSTR lpPassword, OUT LPVOID lpOutUserInfo,IN CONST DWORD &dwTimeOut /* = 3000 */ )
{
	GETDBPTR(dwTimeOut);
	try
	{
		if ( lpPhone == NULL || lpPassword == NULL || pObj == NULL)
			return FALSE;

		CString strSql = _T("");
		strSql.Format(_T("select csr_id,csr_name,csr_phone,csr_gender,csr_password,csr_old_phone,csr_vcode,vcode_expiry_time,enable from customer where csr_phone = %s"), lpPhone);//用于是否转相片;
		pObj->pCommand->CommandText = _bstr_t(strSql);
		// 执行SQL语句，返回记录集
		_RecordsetPtr rst = pObj->pCommand->Execute(NULL, NULL, adCmdText);
		while(!rst->adoEOF)
		{
			#ifdef _DEBUG
			CString strCustomerId;
 			strCustomerId = rst->GetCollect(_T("csr_id")).bstrVal;
 			OutputDebugString(strCustomerId);OutputDebugString(_T("\n"));

			CString strCustomerName;
			strCustomerName = rst->GetCollect(_T("csr_name")).bstrVal;
			OutputDebugString(strCustomerName);OutputDebugString(_T("\n"));

			CString strPhone;
			strPhone = rst->GetCollect(_T("csr_phone")).bstrVal;
			OutputDebugString(strPhone);OutputDebugString(_T("\n"));

			BOOL bGender;
			bGender = rst->GetCollect(_T("csr_gender")).boolVal == VARIANT_TRUE ? TRUE : FALSE;
			OutputDebugString(bGender ? _T("男") : _T("女"));OutputDebugString(_T("\n"));

			CString strPassword;
			strPassword = rst->GetCollect(_T("csr_password")).bstrVal;
			OutputDebugString(strPassword);OutputDebugString(_T("\n"));

			CString strOldPhone;
			strOldPhone = rst->GetCollect(_T("csr_old_phone")).bstrVal;
			OutputDebugString(strOldPhone);OutputDebugString(_T("\n"));

			CString strVCode;
			strVCode = rst->GetCollect(_T("csr_vcode")).bstrVal;
			OutputDebugString(strVCode);OutputDebugString(_T("\n"));

			CString strDate;
			COleDateTime dt(rst->GetCollect(_T("vcode_expiry_time")));
			strVCode = dt.Format(_T("%Y-%m-%d %H:%M:%S"));
			OutputDebugString(strDate);OutputDebugString(_T("\n"));

			BOOL bEnable;
			bEnable = rst->GetCollect(_T("enable")).boolVal == VARIANT_TRUE ? TRUE : FALSE;
			OutputDebugString(bEnable ? _T("启用") : _T("禁用"));OutputDebugString(_T("\n"));

			#endif
			rst->MoveNext();
		}
		rst->Close();
	}
	catch (_com_error &e)
	{
		_bstr_t bstrSource(e.Source());
		_bstr_t bstrDescription(e.Description());
		SolveDBError(e.Error(), pObj);
		Global::WriteTextLog(_T("SQL出错：%08lx,%s,%s,%s"), e.Error(), e.ErrorMessage(), (TCHAR*)bstrSource, (TCHAR*)bstrDescription);
		return FALSE;
	}

	return TRUE;
}

INT CWxAdoImpl::QueryUserDetail(IN LPCTSTR lpStudioID, IN LPVOID lpUserDetail, IN CONST DWORD & dwTimeOut)
{
	
	return 0;
}

/************************************************************************/
/*  函数：[9/25/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryUserDetail( IN LPCTSTR lpStudioID, IN LPCTSTR lpAccount, IN LPCTSTR lpPassword, OUT LPVOID lpOutUserInfo,IN CONST DWORD &dwTimeOut /* = 3000 */ )
{
	

	return USER_NULL;
}

/************************************************************************/
/*  函数：[9/25/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryDepartmentInfo( IN LPCTSTR lpStudioID, OUT LPVOID lpOutDepartmentInfo, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	
	return 0;
}

/************************************************************************/
/*  函数：[9/25/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryStaffInfo(IN LPCTSTR lpStudioID, OUT LPVOID lpOutStaffInfo, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	
	return 0;
}

/************************************************************************/
/*  函数：[9/28/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryUserInfo(IN LPCTSTR lpStudioID, OUT LPVOID lpOutUserInfo, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	

	return 0;
}

/************************************************************************/
/*  函数：[9/30/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryProductType(IN LPCTSTR lpStudioID, OUT LPVOID lpOutProductType, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	

	return 0;
}

/************************************************************************/
/*  函数：[9/30/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryProductInfo(IN LPCTSTR lpStudioID, OUT LPVOID lpOutProductInfo, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{


	return 0;
}

/************************************************************************/
/*  函数：[9/30/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QuerySceneryInfo(IN LPCTSTR lpStudioID, OUT LPVOID lpOutSceneryInfo, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{

	return 0;
}

/************************************************************************/
/*  函数：[9/30/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryPackageType(IN LPCTSTR lpStudioID, OUT LPVOID lpOutPackageType, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	

	return 0;
}

/************************************************************************/
/*  函数：[9/30/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryPackageInfo(IN LPCTSTR lpStudioID, OUT LPVOID lpOutPackageInfo, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	
	return 0;
}

/************************************************************************/
/*  函数：[9/30/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryPackageItems(IN LPCTSTR lpStudioID, OUT LPVOID lpOutPackageItems, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	
	return 0;
}

/************************************************************************/
/*  函数：[10/5/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryPackageItemsView(IN LPCTSTR lpStudioID, OUT LPVOID lpOutPackageItems, IN CONST DWORD & dwTimeOut)
{
	

	return 0;
}

/************************************************************************/
/*  函数：[10/5/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryPackageItemsDetail(IN LPCTSTR lpStudioID, IN LPCTSTR lpPackageSN, OUT LPVOID lpOutPackageItems, IN CONST DWORD & dwTimeOut)
{
	

	return 0;
}

/************************************************************************/
/*  函数：[10/5/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryCustomerType(IN LPCTSTR lpStudioID, OUT LPVOID lpOutCustomerFrom, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	

	return 0;
}

/************************************************************************/
/*  函数：[10/5/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryCustomerInfo(IN LPCTSTR lpStudioID, OUT LPVOID lpOutCustomerInfo, IN LPCTSTR lpFilter, IN CONST DWORD& dwTimeOut /* = 3000 */)
{
	

	return 0;
}

/************************************************************************/
/*  函数：[10/5/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryOrderType(IN LPCTSTR lpStudioID, OUT LPVOID lpOutOrderType, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	

	return 0;
}

/************************************************************************/
/*  函数：[10/16/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryOrderInfo(IN LPCTSTR lpStudioID, OUT LPVOID lpOutOrderInfo, IN LPCTSTR lpFilter, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	

	return 0;
}

/************************************************************************/
/*  函数：[10/16/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryOrderScenery(IN LPCTSTR lpStudioID, OUT LPVOID lpOutOrderScenery, IN LPCTSTR lpFilter, IN CONST DWORD& dwTimeOut /* = 3000 */)
{
	

	return 0;
}

/************************************************************************/
/*  函数：[10/16/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryOrderPackageItems(IN LPCTSTR lpStudioID, OUT LPVOID lpOutOrderPackageItems, IN LPCTSTR lpFilter, IN CONST DWORD& dwTimeOut /* = 3000 */)
{
	
	return 0;
}

/************************************************************************/
/*  函数：[10/16/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QuerySysConfig(IN LPCTSTR lpStudioID, OUT LPVOID lpOutSysConfig, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	
	return 0;
}

/************************************************************************/
/*  函数：[10/16/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryLog(IN LPCTSTR lpStudioID, OUT LPVOID lpOutLog, IN CONST DWORD& dwTimeOut /* = 3000 */ )
{
	

	return 0;
}

/************************************************************************/
/*  函数：[10/27/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryStudioInfo(IN LPCTSTR lpStudioID, OUT LPVOID lpOutStudioInfo, IN CONST DWORD & dwTimeOut)
{
	

	return 0;
}

/************************************************************************/
/*  函数：[10/27/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::SupQueryStudioInfo(OUT LPVOID lpOutStudioInfo, IN CONST DWORD & dwTimeOut)
{
	

	return 0;
}

/************************************************************************/
/*  函数：[2/26/2017 Jeff];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryMaxOrderId(IN LPCTSTR lpStudioID, IN CONST DWORD& dwTimeOut /* = 3000 */)
{
	

	return 0;
}

/************************************************************************/
/*  函数：[2/26/2017 Jeff];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
INT CWxAdoImpl::QueryMaxPrintId(IN LPCTSTR lpStudioID, IN CONST DWORD& dwTimeOut /* = 3000 */)
{
	

	return 0;
}

/************************************************************************/
/*  函数：[10/27/2016 IT];
/*  描述：;
/*  参数：;
/*  	[IN] ：;
/*  	[OUT] ：;
/*  	[IN/OUT] ：;
/*  返回：void;
/*  注意：;
/*  示例：;
/*
/*  修改：;
/*  日期：;
/*  内容：;
/************************************************************************/
BOOL CWxAdoImpl::InsertStudioInfo(IN LPVOID lpStudioInfo, IN CONST DWORD & dwTimeOut)
{
	
	
	return FALSE;
}

BOOL CWxAdoImpl::UpdateStudioInfo(IN LPVOID lpStudioInfo, IN CONST DWORD & dwTimeOut)
{
	
	return FALSE;
}

/*
GETDBPTR(dwTimeOut);
try
{

}
catch (CDBException* e)
{
e->ReportError();
SolveDBError(e->m_nRetCode, pDatabase);
e->Delete();
return FALSE;
}
return TRUE;
*/