研究网狐读取数据库字段<二>

来源:互联网 发布:win10蓝牙 软件 编辑:程序博客网 时间:2024/04/29 04:02

经过这几天的研究,总算成功的从数据库中读取到了字段内容,还要多亏了好心人的帮助。

一、首先要写一个存储过程:脚本如下


----------------------------------------------------------------------------------------------------

USE QPAccountsDB
GO

IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'[dbo].[GSP_GP_PlayTimeCount]') and OBJECTPROPERTY(ID, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[GSP_GP_PlayTimeCount]
GO


SET QUOTED_IDENTIFIER ON
GO

SET ANSI_NULLS ON
GO

----------------------------------------------------------------------------------------------------

-- 获取游戏时长
CREATE PROC GSP_GP_PlayTimeCount
    @dwUserID  INT                                -- 用户 I D
 AS

-- 属性设置
SET NOCOUNT ON


-- 执行逻辑
BEGIN
    -- 变量定义
    DECLARE @PlayTimeCount INT  --游戏时长
    DECLARE @UserID INT    
    
    -- 查询用户
    SELECT @PlayTimeCount=PlayTimeCount
    FROM QPTreasureDBLink.QPTreasureDB.dbo.GameScoreInfo WHERE UserID=@dwUserID
    
    -- 输出变量
    SELECT @PlayTimeCount AS PlayTimeCount

END

RETURN 0

GO

----------------------------------------------------------------------------------------------------

二、在服务端的DataBaseEngineSink.cpp下的登录成功CDataBaseEngineSink::OnLogonDisposeResult这个函数,添加如下代码,代码存放位置为上一个数据库获取字段结束。

m_AccountsDBAide.ResetParameter();
 m_AccountsDBAide.AddParameter(TEXT("@dwUserID"),LogonSuccess.dwUserID);

m_AccountsDBAide.ExecuteProcess(TEXT("GSP_GP_PlayTimeCount"),true);    
 LogonSuccess.szPlayTimeCount=m_AccountsDBAide.GetValue_DWORD(TEXT("PlayTimeCount"));


----------------------------------------------------------------------------------------------------


三、可以增加调试手段来查看数据是否正确,比如显示信息在登录服务器消息框。

CString str;
str.Format(TEXT("PlayTimeCount=%d  %d"),pCMDLogonSuccess->dwGameID,pDBOLogonSuccess->szPlayTimeCount);
CTraceService::TraceString(str,TraceLevel_Debug);

比如在游戏大厅增加弹窗效果:

CString str;
str.Format(TEXT("time=%d"),pGlobalUserData->dwPlayTimeCount);
AfxMessageBox(str);

文件流模式:

  FILE *fp=fopen("S积分记录.txt","a+");
  fprintf(fp,"need_user_score:%lld,user_leave_score:%lld,GetUserScore():%lld\n",need_user_score,user_leave_score,server_user_item->GetUserScore());
  fclose(fp);

----------------------------------------------------------------------------------------------------


四、注意结构体问题,新增的字段切记不要放在结构体的尾端,尾端有可能本来是用于计算结构体大小的。

//登录成功
struct DBO_GP_LogonSuccess
{
    //属性资料
    WORD                            wFaceID;                            //头像标识
    DWORD                            dwUserID;                            //用户标识
    DWORD                            dwGameID;                            //游戏标识
    DWORD                            dwGroupID;                            //社团标识
    DWORD                            dwCustomID;                            //自定索引
    DWORD                            dwUserMedal;                        //用户奖牌
    DWORD                            dwExperience;                        //经验数值
    DWORD                            dwLoveLiness;                        //用户魅力
    DWORD                            dwGoldZl;                            //金币种类
    TCHAR                            szPassword[LEN_MD5];                //登录密码
    TCHAR                            szAccounts[LEN_ACCOUNTS];            //登录帐号
    TCHAR                            szNickName[LEN_NICKNAME];            //用户昵称
    TCHAR                            szGroupName[LEN_GROUP_NAME];        //社团名字
    //游戏时长
    DWORD                            szPlayTimeCount;
    //用户成绩
    SCORE                            lUserScore;                            //用户游戏币
    SCORE                            lUserInsure;                        //用户银行

    //用户资料
    BYTE                            cbGender;                            //用户性别
    BYTE                            cbMoorMachine;                        //锁定机器
    TCHAR                            szUnderWrite[LEN_UNDER_WRITE];        //个性签名

    //会员资料
    BYTE                            cbMemberOrder;                        //会员等级
    SYSTEMTIME                        MemberOverDate;                        //到期时间

    //描述信息
    TCHAR                            szDescribeString[128];                //描述消息

//切记新增字段不要放在尾端。

};


五、需要不断的跟踪调试,才能达到想要的效果,最后我成功在客户端获取到了该PlayTimeCount字段信息。

0 0
原创粉丝点击