研究網狐讀取數據庫字段

經過這幾天的研究,總算成功的從數據庫中讀取到了字段內容,還要多虧了好心人的幫助。

一、首先要寫一個存儲過程:腳本如下


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

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字段信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章