1. 程式人生 > >研究網狐讀取資料庫欄位

研究網狐讀取資料庫欄位

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

一、首先要寫一個儲存過程:指令碼如下


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

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 [email protected]

    
    -- 輸出變數
    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欄位資訊。

相關推薦

研究讀取資料庫

經過這幾天的研究,總算成功的從資料庫中讀取到了欄位內容,還要多虧了好心人的幫助。 一、首先要寫一個儲存過程:指令碼如下 ---------------------------------------

mybatis generator為實體類生成自定義註釋(讀取資料庫的註釋新增到實體類,不修改原始碼)

我們都知道mybatis generator自動生成的註釋沒什麼實際作用,而且還增加了程式碼量。如果能將註釋從資料庫中撈取到,不僅能很大程度上增加程式碼的可讀性,而且減少了後期手動加註釋的工作量。 1、首先定義註釋生成外掛 package com.cmbc.datapla

資料庫讀取時間後面多了一個".0"問題的解決辦法

今天寫自己的部落格網站遇到一個問題:就是從資料庫讀取的時間顯示在網頁上是下面這種,多了一個”.0” 但是我分明已經寫了時間格式: //獲取評論時間 public String commenttime() { SimpleDa

JAVA查詢資料庫讀取日期資料庫中儲存不一致問題

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

python3讀取指定,並批量讀入

  #shell指令,批量傳入 cat titleTest*.txt | python3 readFileTest2.py   #讀取傳入檔案指定欄位 #auto=wangshiyu #File=readFileTest2.py import sys for

sails 資料庫

屬性值 概述 模型的屬性是一個模型的基本的資訊。一個Person的模型可能有屬性叫做firstName,lastName,phoneNumber,age,birthDate和emailAddress。 屬性選項 這些選項可以用來執行各種約束條件並且新增特殊的增強功能到我們的模型中。

MyBatis學習(四)--解決實體屬性和資料庫不一致的問題

寫在前面 孤傲蒼狼的部落格:https://www.cnblogs.com/xdp-gacl/category/655890.html 程式碼中會有很多重要的註釋,請不要忽略。 前面在建立實體時,強調過一定要和資料庫列名一致。如果不一致結果是對映不到實體中的,但是資料庫和j

C#查詢ACCESS資料庫和時間

查詢表的所有欄位 string.Format("SELECT * FROM{0}", TableName); 查詢表中的一個欄位 在ACCESS中將欄位用CStr()轉換成字串來判斷 string.Format("SELECT* FROM {0} WHERE CStr({1})=

ORACLE資料庫型別說明

型別 含義 儲存描述 備註 CHAR 固定長度字串 最大長度2000bytes   VARCHAR2 可變長度的字串,

@Column可以解決資料庫為關鍵字問題

在下面程式碼中numeric欄位是資料庫中的數值型別的關鍵字,只有加上@Column之後才不會報錯import javax.persistence.*;@Table(name = "tb_spec_param")public class SpecParam { @Id @GeneratedValu

Oracle資料庫資料拆分成多行(REGEXP_SUBSTR函式)

做多選功能時為了簡便,會在某個欄位中儲存多個值,儲存時雖然省事,但後續的查詢統計時還需要拆分資料才行,因此這時需要將欄位內的值分成多行以便後續使用。 下面這個例子實現了欄位內資料的拆分: --建立測試表 create table t_test( t_type_id varchar2

【MyBatis】解決資料庫名稱與Java實體類屬性名稱不一致問題

問題描述:       有時候在專案中會遇到資料庫欄位名稱與實體類屬性名稱取得不一樣的情況,如下:      資料庫裡的資料為:       此時,如果我們查詢該表的某條資料,Proj

laravel 修改資料庫屬性

1.引入doctrine/dbal 依賴 方法: 命令列裡輸入 composer require doctrine/dbal 2.建立一個新的migration檔案 php artisan make:migration modify_age_column_in_tests_table --table=t

修改資料庫、增加

import csvimport psycopg2class IO_rw(object): def __init__(self): self.csvfile = open("test_scouce.csv", "w") self.writer = csv.writer(sel

MyBatis中五種成功對映資料庫與實體類屬性不一致的解決方案

在Mybatis中,當根據某欄位查詢資料庫資訊時,如果資料庫欄位名與實體類屬性名稱不一致,查詢時,會出現賦值不上的情況,值為Null。本次將給出五種方案,其中方案三、四為推薦。例如:根據學號sno查詢學生資訊1.資料庫表student欄位名稱以及型別:2.資料庫表內容:3.實

spring data jpa 框架在實體類中新增非資料庫的屬性

    Spring-data-jpa表實體的欄位和表的欄位是一一對應的。比如,那麼,如果我在查詢時,想在表字段的基礎上新增幾個返回的欄位,怎麼辦? 解:在實體類中新增我們想新增的欄位,並加上註解:@

mybatis資料庫增加

http://zhanghteye.iteye.com/blog/2372572 今天處理一個生產環境報NullPointerException的問題,根據查詢的物件,獲得物件中的一個欄位,結果為空。   報錯位置:int partnerCode = servicefee

資料庫唯一性約束設定(總結一)

突然看到資料庫表設計中的幾個屬性,記錄一下 restrict--限制,指的是如果字表引用父表的某個欄位的值,那麼不允許直接刪除父表的該值; cascade--級聯,刪除父表的某條記錄,子表中引用該值的記錄會自動被刪除; no action--無參照完整性關係,有了也不生效。

Mybatis 當實體屬性與資料庫不一致時的解決方案

使用Mybatis的時候,Mybatis根據資料庫的欄位找到對應實體類的屬性,通過set方法對屬性進行注入。 我們可以對實體類的set方法進行測試,測試如下: 執行結果如下: 說明:Mybatis會根據相同的屬性和欄位名通過set方法進行注入 那

【TP5】根據資料庫註釋使用同一模板進行增刪查

author:咔咔 wechat:fangkangfk   有沒有在新增跟修改的時候很煩,需要寫很多頁面,修改還需要追加資料,很煩,很煩   下來就解決這樣的問題,所有模組的新增,修改,檢視,都使用同一個模板 首先從資料庫設計開始 註釋解釋: