⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsodbc.cpp

📁 Soul的源代码,类似于劲舞团之类的游戏
💻 CPP
📖 第 1 页 / 共 4 页
字号:
//	Return Value :: 
//	Bug	Report	 ::
//-------------------------------------------------------------------------------------------------------
BOOL TsODBC::Connection(void)
{
	//券版 勤甸阑 劝寸 窍绊 滚怜阑 汲沥茄促.
	if(SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &m_hEnv) != SQL_SUCCESS) return FALSE;
	if(SQLSetEnvAttr(m_hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER) != SQL_SUCCESS) return FALSE;

	//楷搬 勤甸阑 劝寸窍绊 楷搬茄促.
	if(SQLAllocHandle(SQL_HANDLE_DBC, m_hEnv, &m_hDBC) != SQL_SUCCESS) return FALSE;

	int ret = SQLConnect(m_hDBC, (SQLCHAR*)"tsDB1",16, (SQLCHAR*)"sa", 16, (SQLCHAR*)"sa4900db", 16);

	if((ret != SQL_SUCCESS) && (ret != SQL_SUCCESS_WITH_INFO) )
	{
		PrintError( NULL, m_hDBC );
		return FALSE;
	}

	SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtcnntpl );
	SQLPrepare( m_hStmtcnntpl, (SQLCHAR *)"{call s_cnntpl}", SQL_NTS );
	SQLBindParameter( m_hStmtcnntpl, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int) , 0,
		&m_iDummy, sizeof(int), &m_siZero); 

	if( m_iCallType == 1 )
	{// LogIn Server 
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtAccountSt );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtLogInUp );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtLogOutUp );
		/****************** Parameter Bind ********************/
		// 肺弊牢 牢刘 沥焊
		SQLPrepare( m_hStmtAccountSt, (SQLCHAR *)"{call s_AccSt ( ? ) }", SQL_NTS );
		SQLBindParameter( m_hStmtAccountSt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 16 , 0,
			m_cID, 16, &m_siNTS);	
		// 肺弊牢 矫埃 诀单捞飘
		SQLPrepare( m_hStmtLogInUp, (SQLCHAR *)"{call s_AccLIUp ( ?, ? ) }", SQL_NTS );
		SQLBindParameter( m_hStmtLogInUp, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 16 , 0,
			m_cID, 16, &m_siNTS); 
		SQLBindParameter( m_hStmtLogInUp, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 16, 0,
			m_cIP, 16, &m_siNTS);
		//SQLBindParameter( m_hStmtLogInUp, 2, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, SQL_TYPE_TIMESTAMP, 0 , 0,
		//	&m_stDate, 0, &m_siNTS); SQL_C_TYPE_DATE  SQL_TYPE_DATE
		// 肺弊酒眶 矫埃 诀单捞飘
		SQLPrepare( m_hStmtLogOutUp, (SQLCHAR *)"{call s_AccLOUp ( ? ) }", SQL_NTS );
		SQLBindParameter( m_hStmtLogOutUp, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 16 , 0,
			m_cID, 16, &m_siNTS);
		//SQLBindParameter( m_hStmtLogOutUp, 2, SQL_PARAM_INPUT, SQL_C_TYPE_TIMESTAMP, SQL_TYPE_TIMESTAMP, 0 , 0,
		//	&m_stDate, 0, &m_siNTS);
		/****************** Col Bind ********************/
		// 肺弊牢 牢刘 沥焊 CPassword(16),iAccountID(int),iAdminLevel(byte),BlockData(date)
		SQLBindCol( m_hStmtAccountSt, 1, SQL_C_CHAR, m_AccInfo.Password, 16, &m_siColLen );
		SQLBindCol( m_hStmtAccountSt, 2, SQL_C_SLONG, &m_AccInfo.iAccountID, 0, &m_siColLen );
		SQLBindCol( m_hStmtAccountSt, 3, SQL_C_TINYINT, &m_AccInfo.iAdminLevel, 0, &m_siColLen );
		SQLBindCol( m_hStmtAccountSt, 4, SQL_C_TYPE_TIMESTAMP, &m_AccInfo.BlockDate, 0, &m_siColLen );
	}
	else if( m_iCallType == 2 )
	{// Char Server
		//疙飞 勤甸阑 劝寸茄促.
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtCharInfoSt );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtDetailInfoSt );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtEquipSt );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtInvenSt );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtStoreSt );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtStore2St );

		/****************** Parameter Bind ********************/
		// charInfo select
		SQLPrepare( m_hStmtCharInfoSt, (SQLCHAR *)"{call s_selectCRInfo ( ? ) }", SQL_NTS );
		SQLBindParameter( m_hStmtCharInfoSt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iAccountID, sizeof(int), &m_siZero );
		// DetailInfo select
		SQLPrepare( m_hStmtDetailInfoSt, (SQLCHAR *)"{call s_selectDetail ( ? ) }", SQL_NTS );
		SQLBindParameter( m_hStmtDetailInfoSt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iCharIndex, sizeof(int), &m_siZero );
		// Equip Item select
		SQLPrepare( m_hStmtEquipSt, (SQLCHAR *)"{call s_selectEquip ( ? ) }", SQL_NTS );
		SQLBindParameter( m_hStmtEquipSt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iCharIndex, sizeof(int), &m_siZero );
		// InvenInfo select
		SQLPrepare( m_hStmtInvenSt, (SQLCHAR *)"{call s_selectItem ( ? ) }", SQL_NTS );
		SQLBindParameter( m_hStmtInvenSt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iCharIndex, sizeof(int), &m_siZero );
		// Store1 select
		SQLPrepare( m_hStmtStoreSt, (SQLCHAR *)"{call s_selectStore ( ? ) }", SQL_NTS );
		SQLBindParameter( m_hStmtStoreSt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iAccountID, sizeof(int), &m_siZero );
		// Store2 select
		SQLPrepare( m_hStmtStore2St, (SQLCHAR *)"{call s_selectStore2 ( ? ) }", SQL_NTS );
		SQLBindParameter( m_hStmtStore2St, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iAccountID, sizeof(int), &m_siZero );
		/****************** Col Bind ********************/
		// charInfo select
		SQLBindCol( m_hStmtCharInfoSt, 1, SQL_C_SLONG, &m_info.m_CharInfo._iCharIndex, 0, &m_siColLen );
		SQLBindCol( m_hStmtCharInfoSt, 2, SQL_C_CHAR, m_info.m_CharInfo._charName, 16, &m_siColLen );
		SQLBindCol( m_hStmtCharInfoSt, 3, SQL_C_SLONG, &m_info.m_CharInfo._iShape.iShape, 0, &m_siColLen );
		SQLBindCol( m_hStmtCharInfoSt, 4, SQL_C_TINYINT, &m_info.m_CharInfo._byUnion, 0, &m_siColLen );
		SQLBindCol( m_hStmtCharInfoSt, 5, SQL_C_TINYINT, &m_info.m_CharInfo._byJob, 0, &m_siColLen );
		SQLBindCol( m_hStmtCharInfoSt, 6, SQL_C_SLONG, &m_info.m_CharInfo._iClassShape.iClassShape, 0, &m_siColLen );
		SQLBindCol( m_hStmtCharInfoSt, 7, SQL_C_TINYINT, &m_info.m_CharInfo._bySex, 0, &m_siColLen );
		// Equip Item select
		int icount = 1;
		for( int i = 0; i < MAX_EQUIPCOUNT; i++ )
		{
			SQLBindCol( m_hStmtEquipSt, icount, SQL_C_SLONG, &m_info.strEquipItem[i].ItemDate.iItemMakeTime, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtEquipSt, icount, SQL_C_SLONG, &m_info.strEquipItem[i].ItemSN.iItemSN, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtEquipSt, icount, SQL_C_SSHORT, &m_info.strEquipItem[i].ItemInfo.wItemNo, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtEquipSt, icount, SQL_C_TINYINT, &m_info.strEquipItem[i].ItemInfo.byItemCount, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtEquipSt, icount, SQL_C_TINYINT, &m_info.strEquipItem[i].ItemInfo.byItemLevel, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtEquipSt, icount, SQL_C_SLONG, 
				&m_info.strEquipItem[i].ItemInfo.iItemOption.bfc_ItemOption.iItem_SpOption,	0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtEquipSt, icount, SQL_C_SSHORT, 
				&m_info.strEquipItem[i].ItemInfo.iItemOption.bfc_ItemOption.iItem_SttOption, 0, &m_siColLen );
			icount++;
		}
		// DetailInfo select  m_hStmtDetailInfoSt 20俺.
		SQLBindCol( m_hStmtDetailInfoSt, 1, SQL_C_SLONG, &m_info.iMoney, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 2, SQL_C_SLONG, &m_info.iStoreMoney, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 3, SQL_C_TINYINT, &m_info.byStr, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 4, SQL_C_TINYINT, &m_info.byVit, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 5, SQL_C_TINYINT, &m_info.byInt, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 6, SQL_C_TINYINT, &m_info.byMan, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 7, SQL_C_TINYINT, &m_info.byDex, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 8, SQL_C_SSHORT, &m_info.stHp, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 9, SQL_C_SSHORT, &m_info.stMp, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 10, SQL_C_TINYINT, &m_info.byLevel, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 11, SQL_C_SLONG, &m_info.iSpritePoint, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 12, SQL_C_SLONG, &m_info.iFame, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 13, SQL_C_FLOAT, &m_info.xpos, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 14, SQL_C_FLOAT, &m_info.ypos, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 15, SQL_C_FLOAT, &m_info.zpos, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 16, SQL_C_TINYINT, &m_info.byZoneNumber, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 17, SQL_C_TINYINT, &m_info.byClass, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 18, SQL_C_SLONG, &m_info.iGuild, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 19, SQL_C_TINYINT, &m_info.byWarpPos, 0, &m_siColLen );
		SQLBindCol( m_hStmtDetailInfoSt, 20, SQL_C_SLONG, &m_info.iExp, 0, &m_siColLen );
		
		// InvenInfo select   m_hStmtInvenSt
		icount = 1;
		for( i = 0; i < MAX_INVENCOUNT; i++ )
		{
			SQLBindCol( m_hStmtInvenSt, icount, SQL_C_SLONG, &m_info.strInvenItem[i].ItemDate.iItemMakeTime, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtInvenSt, icount, SQL_C_SLONG, &m_info.strInvenItem[i].ItemSN.iItemSN, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtInvenSt, icount, SQL_C_SSHORT, &m_info.strInvenItem[i].ItemInfo.wItemNo, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtInvenSt, icount, SQL_C_TINYINT, &m_info.strInvenItem[i].ItemInfo.byItemCount, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtInvenSt, icount, SQL_C_TINYINT, &m_info.strInvenItem[i].ItemInfo.byItemLevel, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtInvenSt, icount, SQL_C_SLONG,
				&m_info.strInvenItem[i].ItemInfo.iItemOption.bfc_ItemOption.iItem_SpOption, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtInvenSt, icount, SQL_C_SSHORT, 
				&m_info.strInvenItem[i].ItemInfo.iItemOption.bfc_ItemOption.iItem_SttOption, 0, &m_siColLen );
			icount++;
		}
		// Store1 select      m_hStmtStoreSt
		icount = 1;
		for( i = 0; i < HALF_STORECOUNT; i++ )
		{
			SQLBindCol( m_hStmtStoreSt, icount, SQL_C_SLONG, &m_info.strStoreItem[i].ItemDate.iItemMakeTime, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStoreSt, icount, SQL_C_SLONG, &m_info.strStoreItem[i].ItemSN.iItemSN, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStoreSt, icount, SQL_C_SSHORT, &m_info.strStoreItem[i].ItemInfo.wItemNo, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStoreSt, icount, SQL_C_TINYINT, &m_info.strStoreItem[i].ItemInfo.byItemCount, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStoreSt, icount, SQL_C_TINYINT, &m_info.strStoreItem[i].ItemInfo.byItemLevel, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStoreSt, icount, SQL_C_SLONG, 
				&m_info.strStoreItem[i].ItemInfo.iItemOption.bfc_ItemOption.iItem_SpOption, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStoreSt, icount, SQL_C_SSHORT, 
				&m_info.strStoreItem[i].ItemInfo.iItemOption.bfc_ItemOption.iItem_SttOption, 0, &m_siColLen );
			icount++;
		}
		// Store2 select      m_hStmtStore2St
		icount = 1;
		for( i = 0; i < HALF_STORECOUNT; i++ )
		{
			SQLBindCol( m_hStmtStore2St, icount, SQL_C_SLONG, &m_info.strStoreItem[i + HALF_STORECOUNT].ItemDate.iItemMakeTime, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStore2St, icount, SQL_C_SLONG, &m_info.strStoreItem[i + HALF_STORECOUNT].ItemSN.iItemSN, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStore2St, icount, SQL_C_SSHORT, &m_info.strStoreItem[i + HALF_STORECOUNT].ItemInfo.wItemNo, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStore2St, icount, SQL_C_TINYINT, &m_info.strStoreItem[i + HALF_STORECOUNT].ItemInfo.byItemCount, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStore2St, icount, SQL_C_TINYINT, &m_info.strStoreItem[i + HALF_STORECOUNT].ItemInfo.byItemLevel, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStore2St, icount, SQL_C_SLONG, 
				&m_info.strStoreItem[i + HALF_STORECOUNT].ItemInfo.iItemOption.bfc_ItemOption.iItem_SpOption, 0, &m_siColLen );
			icount++;
			SQLBindCol( m_hStmtStore2St, icount, SQL_C_SSHORT, 
				&m_info.strStoreItem[i + HALF_STORECOUNT].ItemInfo.iItemOption.bfc_ItemOption.iItem_SttOption, 0, &m_siColLen );
			icount++;
		}
	}
	else if( m_iCallType == 3 )
	{// Game Server
		
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtCharInfoUp );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtDetailInfoUp );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtEquipUp );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtInvenUp );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtStoreUp );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtStore2Up );

		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtDelChar );
		SQLAllocHandle( (SQLSMALLINT)SQL_HANDLE_STMT, m_hDBC , &m_hStmtInsert );

		/****************** Parameter Bind ********************/
		// charInfo delete
		SQLPrepare( m_hStmtDelChar, (SQLCHAR *)"{call s_deleteChar ( ?, ?, ?, ? ) }", SQL_NTS );
		SQLBindParameter( m_hStmtDelChar, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iAccountID, sizeof(int), &m_siZero );
		SQLBindParameter( m_hStmtDelChar, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iCharIndex, sizeof(int), &m_siZero );
		SQLBindParameter( m_hStmtDelChar, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 16 , 0,
			&m_info.m_CharInfo._charName, 16, &m_siNTS);	
		SQLBindParameter( m_hStmtDelChar, 4, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_iOutPutValue, sizeof(int), &m_siIntLen );

		// charInfo Insert
		SQLPrepare( m_hStmtInsert, (SQLCHAR *)"{call s_insertChar (?,?,?,?,?,?, ?,?,?,?,?,?,?,?,?,?,?,?) }", SQL_NTS );
		SQLBindParameter( m_hStmtInsert, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iAccountID, sizeof(int), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 16 , 0,
			&m_info.m_CharInfo._charName, 16, &m_siNTS);	
		SQLBindParameter( m_hStmtInsert, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iShape.iShape, sizeof(int), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 4, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.m_CharInfo._byUnion, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 5, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.m_CharInfo._byJob, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 6, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.m_CharInfo._bySex, sizeof(BYTE), &m_siZero );

		SQLBindParameter( m_hStmtInsert, 7, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byStr, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 8, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byVit, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 9, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byInt, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 10, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byMan, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 11, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byDex, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 12, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_SMALLINT, sizeof(short), 0,
			&m_info.stHp, sizeof(short), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 13, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_SMALLINT, sizeof(short), 0,
			&m_info.stMp, sizeof(short), &m_siZero );	
		SQLBindParameter( m_hStmtInsert, 14, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, sizeof(float), 0,
			&m_info.xpos, sizeof(float), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 15, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, sizeof(float), 0,
			&m_info.ypos, sizeof(float), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 16, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, sizeof(float), 0,
			&m_info.zpos, sizeof(float), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 17, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byZoneNumber, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtInsert, 18, SQL_PARAM_OUTPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_iOutPutValue, sizeof(int), &m_siIntLen );

		// charInfo
		SQLPrepare( m_hStmtCharInfoUp, (SQLCHAR *)"{call s_UpdateCRInfo ( ?, ?, ?, ? ) }", SQL_NTS );
		SQLBindParameter( m_hStmtCharInfoUp, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 16 , 0,
			&m_info.m_CharInfo._charName, 16, &m_siNTS);	
		SQLBindParameter( m_hStmtCharInfoUp, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iShape.iShape, sizeof(int), &m_siZero );	
		SQLBindParameter( m_hStmtCharInfoUp, 3, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.m_CharInfo._byJob, sizeof(BYTE), &m_siZero );	
		SQLBindParameter( m_hStmtCharInfoUp, 4, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iClassShape.iClassShape, sizeof(int), &m_siZero );	

		// charDetailInfo
		SQLPrepare( m_hStmtDetailInfoUp, (SQLCHAR *)"{call s_UpdateDetail ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) }" , SQL_NTS );
		SQLBindParameter( m_hStmtDetailInfoUp, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.m_CharInfo._iCharIndex, sizeof(int), &m_siZero );	
		SQLBindParameter( m_hStmtDetailInfoUp, 2, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.iMoney, sizeof(int), &m_siZero );	
		SQLBindParameter( m_hStmtDetailInfoUp, 3, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.iStoreMoney, sizeof(int), &m_siZero );	
		SQLBindParameter( m_hStmtDetailInfoUp, 4, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_BINARY, SKILL_SIZE, 0,
			(SQLPOINTER)4, 0, &m_siExec);
		SQLBindParameter( m_hStmtDetailInfoUp, 5, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byStr, sizeof(BYTE), &m_siZero );	
		SQLBindParameter( m_hStmtDetailInfoUp, 6, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byVit, sizeof(BYTE), &m_siZero );	
		SQLBindParameter( m_hStmtDetailInfoUp, 7, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byInt, sizeof(BYTE), &m_siZero );	
		SQLBindParameter( m_hStmtDetailInfoUp, 8, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byMan, sizeof(BYTE), &m_siZero );	
		SQLBindParameter( m_hStmtDetailInfoUp, 9, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byDex, sizeof(BYTE), &m_siZero );	
		SQLBindParameter( m_hStmtDetailInfoUp, 10, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_SMALLINT, sizeof(short), 0,
			&m_info.stHp, sizeof(short), &m_siZero );	
		SQLBindParameter( m_hStmtDetailInfoUp, 11, SQL_PARAM_INPUT, SQL_C_SSHORT, SQL_SMALLINT, sizeof(short), 0,
			&m_info.stMp, sizeof(short), &m_siZero );	
		SQLBindParameter( m_hStmtDetailInfoUp, 12, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_BINARY, STRANGE_SIZE, 0,
			(SQLPOINTER)12, 0, &m_siExec);
		SQLBindParameter( m_hStmtDetailInfoUp, 13, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_BINARY, BUFF_SIZE, 0,
			(SQLPOINTER)13, 0, &m_siExec);
		SQLBindParameter( m_hStmtDetailInfoUp, 14, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byLevel, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtDetailInfoUp, 15, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.iSpritePoint, sizeof(int), &m_siZero );
		SQLBindParameter( m_hStmtDetailInfoUp, 16, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.iFame, sizeof(int), &m_siZero );
		SQLBindParameter( m_hStmtDetailInfoUp, 17, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, sizeof(float), 0,
			&m_info.xpos, sizeof(float), &m_siZero );
		SQLBindParameter( m_hStmtDetailInfoUp, 18, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, sizeof(float), 0,
			&m_info.ypos, sizeof(float), &m_siZero );
		SQLBindParameter( m_hStmtDetailInfoUp, 19, SQL_PARAM_INPUT, SQL_C_FLOAT, SQL_REAL, sizeof(float), 0,
			&m_info.zpos, sizeof(float), &m_siZero );

		SQLBindParameter( m_hStmtDetailInfoUp, 20, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byZoneNumber, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtDetailInfoUp, 21, SQL_PARAM_INPUT, SQL_C_BINARY, SQL_BINARY, MACRO_SIZE, 0,
			(SQLPOINTER) 21, 0, &m_siExec);
		SQLBindParameter( m_hStmtDetailInfoUp, 22, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byClass, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtDetailInfoUp, 23, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.iGuild, sizeof(int), &m_siZero );
		SQLBindParameter( m_hStmtDetailInfoUp, 24, SQL_PARAM_INPUT, SQL_C_TINYINT, SQL_TINYINT, sizeof(BYTE), 0,
			&m_info.byWarpPos, sizeof(BYTE), &m_siZero );
		SQLBindParameter( m_hStmtDetailInfoUp, 25, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(int), 0,
			&m_info.iExp, sizeof(int), &m_siZero );

		// Equip
		char	cText[1280];
		wsprintf(cText,"{call s_UpdateEquip (?");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -