网狐棋牌框架学习笔记(20160524、20160617、20160622、20160702)

Win8.1+VS2012+Update 5编译:
http://code.taobao.org/svn/wh6603/trunk/
目前项目中的数据对接调试2016-6-17 14:34:
账号登陆香港
包头8个字节,包体227个字节
setUserLogin
send 100_2,send data size = 235
m_pClientLoginSock->sendData(MDM_MB_LOGON,SUB_MB_LOGON_ACCOUNTS,pLogonByAccounts,sizeof(CMD_MB_LogonAccounts));

登录香港成功
wMainCmdID = 100,wSubCmdID = 100
OnSocketSubLogonSuccess
wFaceID:0
login success2! file(d:\cocos2d-x-2.2.5\projects\bjl\classes\msgdispatch\msgdispatch.cpp) line(374)
read root node error
read root node error
login success! file(d:\cocos2d-x-2.2.5\projects\bjl\classes\msgdispatch\msgdispatch.cpp) line(429)
MsgDispatch::onEventTcpLoginRead
case MDM_MB_LOGON://登录消息 100
case SUB_MB_LOGON_SUCCESS://登录成功 100
MsgDispatch::onSocketSubLogonSuccess

手机登陆香港服房间
147
send 1_2,send data size = 155
包头8个字节,包体147个字节
m_pClientGameSock->sendData(MDM_GR_LOGON, SUB_GR_LOGON_MOBILE, (void*)lm, sizeof(CMD_GR_LogonMobile));

wMainCmdID = 2,wSubCmdID = 101
case MDM_GR_CONFIG:   //配置信息    2
case SUB_GR_CONFIG_SERVER:   // 房间配置
wMainCmdID = 2,wSubCmdID = 103
case MDM_GR_CONFIG:   //配置信息    2
case SUB_GR_CONFIG_FINISH:   // 配置完成

wMainCmdID = 3,wSubCmdID = 100
case MDM_GR_USER:   //用户消息    3
case SUB_GR_USER_ENTER:    // 用户进入 100
用户进入
wMainCmdID = 1,wSubCmdID = 102
case MDM_GR_LOGON:   //登录消息    1
case SUB_GR_LOGON_FINISH:  //登陆完成
----------------------gameserver login success!-------------------------- file(d:\cocos2d-x-2.2.5\projects\bjl\classes\entity\roomframe.cpp) line(239)
RoomFrame::OnSocketSubGRLogonFinish m_bStartType=1,m_cbStatus=1

wMainCmdID = 3,wSubCmdID = 101
case MDM_GR_USER:   //用户消息    3
case SUB_GR_USER_SCORE:   // 用户积分 101

wMainCmdID = 3,wSubCmdID = 102
case MDM_GR_USER:   //用户消息    3
case SUB_GR_USER_STATUS:   // 用户状态 102
send 3_11,send data size = 12
包头8个字节,包体4个字节
m_pClientGameSock->sendData(MDM_GR_USER, SUB_GR_USER_CHAIR_INFO_REQ, info, sizeof(CMD_GR_ChairUserInfoReq));

send 100_1,send data size = 17
包头8个字节,包体9个字节
m_pClientGameSock->sendData(MDM_GF_FRAME, SUB_GF_GAME_OPTION, gameOption, sizeof(CMD_GF_GameOption));

wMainCmdID = 100,wSubCmdID = 100
OnFrameMessage
gamestatus!
RoomFrame::OnEventTcpRoomRead
case MDM_GF_FRAME:   //框架命令    100
RoomFrame::OnFrameMessage
case SUB_GF_GAME_STATUS:   // 游戏状态 100

wMainCmdID = 100,wSubCmdID = 200
OnFrameMessage
RoomFrame::OnEventTcpRoomRead
case MDM_GF_FRAME:   //框架命令    100
RoomFrame::OnFrameMessage
case SUB_GF_SYSTEM_MESSAGE:   // 系统消息 200
 
wMainCmdID = 200,wSubCmdID = 106
SUB_S_CHEAT_CARD
75
5
RoomFrame::OnEventTcpRoomRead
case MDM_GF_GAME:   //游戏命令    200
RoomFrame::OnGameMessage
SceneLogic::onGameMessage
case SUB_S_SEND_RECORD:   // 游戏记录 106

账号登陆九亿
包头8个字节,包体200个字节
setUserLogin
send 1_1,send data size = 208
m_pClientLoginSock->sendData(MDM_GP_LOGON,SUB_GP_LOGON_ACCOUNTS,pLogonByAccounts,sizeof(CMD_GP_LogonAccounts));

send 0_2,send data size = 136
包头8个字节,包体128个字节
validate->szValidateKey = 0x00aceb6c L"345E2FFA-891E-4021-A57E-80ECF3466896"
m_pClientGameSock->sendData(MDM_KN_COMMAND, SUB_KN_VALIDATE_SOCKET, (void*)validate, sizeof(TCP_Validate));

登录失败,错误代码lf.lErrorCode=1
RoomFrame::OnSocketSubGRLogonFailure
wMainCmdID = 1,wSubCmdID = 101
m_eDataType = 2
close socket
game server login failed! file(f:\cocos2d-x-2.2.5\projects\9yilottery\classes\entity\roomframe.cpp) line(270)
您的帐号不存在或者密码输入有误,请查证后再次尝试登录!

九亿登录服返回
connectLoginServer
setUserLogin
send 1_1,send data size = 208
wMainCmdID = 1,wSubCmdID = 100
m_eDataType = 1
OnSocketSubLogonSuccess
wFaceID:0
login success2! file(f:\cocos2d-x-2.2.5\projects\9yilottery\classes\msgdispatch\msgdispatch.cpp) line(522)
login success! file(f:\cocos2d-x-2.2.5\projects\9yilottery\classes\msgdispatch\msgdispatch.cpp) line(549)
case MDM_GP_LOGON:          //登录消息 1
case SUB_MB_LOGON_SUCCESS:   // 登录成功 100

wMainCmdID = 2,wSubCmdID = 100
m_eDataType = 1
case MDM_GP_SERVER_LIST://列表消息 2
case SUB_MB_LIST_KIND:    // 种类列表 100
CMD_Logon  = 1,  // 登录
wMainCmdID = 2,wSubCmdID = 101
m_eDataType = 1
case MDM_GP_SERVER_LIST://列表消息 2
case SUB_MB_LIST_SERVER:   // 房间列表 101
wMainCmdID = 2,wSubCmdID = 103
m_eDataType = 1
OnSocketSubListFinish
case MDM_GP_SERVER_LIST://列表消息 2
case SUB_MB_LIST_FINISH:   // 列表完成 103
 
wMainCmdID = 1,wSubCmdID = 102
m_eDataType = 1
wMainCmdID = 1,wSubCmdID = 102 wDataSize=4
OnSocketSubGPLogonFinish
wIntermitTime=0,wOnLineCountTime=600
case MDM_GP_LOGON:          //登录消息 1
case SUB_GP_LOGON_FINISH:   // 登录完成 102<add by hxh>
不是:
case MDM_GR_LOGON:   //登录消息    1
case SUB_GR_LOGON_FINISH:  //登陆完成 102
 
wMainCmdID = 3,wSubCmdID = 503
m_eDataType = 1
case MDM_GP_USER_SERVICE:          // 3
case SUB_GP_QUERY_TIME_RET:// 503

九亿房间服登录
ip=120.27.161.76,wServerPort=3000
send 0_2,send data size = 136
hanxiaohua
hxh123
sizeof(CMD_GR_LogonMobile)=146,m_dwUserID=80183
send 1_2,send data size = 154
包头8个字节,包体146个字节
m_pClientGameSock->sendData(MDM_GR_LOGON, SUB_GR_LOGON_MOBILE, (void*)lm, sizeof(CMD_GR_LogonMobile));
#define MDM_GR_LOGON    1         // 登录信息
#define SUB_GR_LOGON_MOBILE   2         // 手机登录

登录房间失败
case MDM_GR_LOGON:   //登录消息    1
case SUB_GR_LOGON_FAILURE:   //登陆失败 101

错误码为4,包体50个字节
wMainCmdID = 1,wSubCmdID = 101
m_eDataType = 2
close socket
game server login failed! file(f:\cocos2d-x-2.2.5\projects\9yilottery\classes\entity\roomframe.cpp) line(275)
抱歉地通知您,您的帐户没有权限进入此类游戏!

登录完成
RoomFrame::OnSocketSubGRLogonFinish m_bStartType=1,m_cbStatus=0

返回大厅时起立请求
wTableID=0,wChairID=0,cbForceLeave=1
send 3_4,send data size = 13
包头8个字节,包体5个字节
m_pClientGameSock->sendData(MDM_GR_USER, SUB_GR_USER_STANDUP, info, sizeof(CMD_GR_UserStandUp));
网狐协议分析-服务器接收2016-5-24 23:02
http://my.oschina.net/godareyou/blog/552721
在服务器那里,网络通信有两个接口:IClientSocketSink[ZhuQue项目是IClientKernelSink] IAttemperEngineSink
IClientSocketSink一般用用于网络服务器之间通信
IAttemperEngineSink用于和客户端通信
1a、fish项目|SocketModule.h|IClientSocketSink
//网络钩子接口
interface IClientSocketSink : public IUnknownEx
1b、ZhuQue项目|
F:\ZhuQue\Game\开发库\Include>type GameFrame.h
//内核钩子接口
interface IClientKernelSink : public IUnknownEx
F:\ZhuQue\Game\开发库\Include>type ClientKernelSink.h
//内核钩子类
class CClientKernelSink : public IClientKernelSink
2a、fish项目|ServerKernel.h|IAttemperEngineSink
//调度模块钩子接口
interface IAttemperEngineSink : public IUnknownEx
2b、ZhuQue项目|
F:\ZhuQue\Game\开发库\Include>type KernelEngineHead.h
//调度钩子
interface IAttemperEngineSink : public IUnknownEx
F:\ZhuQue\Game\开发库\Include>type AttemperEngineSink.h
//调度引擎钩子
class CAttemperEngineSink : public IAttemperEngineSink, public IGameServiceFrame

// logon server
CAttemperEngineSink::OnEventSocketRead
    MDM_GP_LOGON  //登录消息
        SUB_GP_LOGON_ACCOUNTS  //帐号登录
      CMD_GP_LogonByAccounts
  SUB_GP_LOGON_USERID  //ID 登录
   CMD_GP_LogonByUserID
  SUB_GP_REGISTER_ACCOUNTS  //注册帐号
      CMD_GP_RegisterAccounts

大厅客户端与登录服务器之间通信的命令号、包体:
F:\ZhuQue\Game\开发库\Include>type CMD_Plaza.h
#define MDM_GP_LOGON     1        //广场登录
#define SUB_GP_LOGON_ACCOUNTS   1        //帐号登录
//帐号登录
struct CMD_GP_LogonByAccounts
{
 CMD_GP_LogonByAccounts()
 {
   memset(this, 0, sizeof(*this));
 }
 DWORD        dwPlazaVersion;     //广场版本
 TCHAR        szAccounts[NAME_LEN];   //登录帐号
 TCHAR        szPassWord[PASS_LEN];   //登录密码
};

 
// gamer server
CAttemperEngineSink::OnEventSocketRead
 MDM_GR_LOGON  //登录消息
        SUB_GP_LOGON_ACCOUNTS  //帐号登录
      CMD_GP_LogonByAccounts
  SUB_GP_LOGON_USERID  //ID 登录
   CMD_GP_LogonByUserID
 MDM_GR_USER  //用户消息
  SUB_GR_USER_SIT_REQ  //坐下桌子
  SUB_GR_USER_LOOKON_REQ  //旁观桌子
   CMD_GR_UserSitReq
  SUB_GR_USER_STANDUP_REQ  //起立请求
  SUB_GR_USER_LEFT_GAME_REQ  //强退请求
  SUB_GR_USER_CHAT  //聊天消息
   CMD_GR_UserChat
  SUB_GR_USER_WISPER  //私语消息
   CMD_GR_Wisper
  SUB_GR_USER_RULE  //用户规则
   CMD_GR_UserRule
  SUB_GR_USER_INVITE_REQ  //邀请用户
   CMD_GR_UserInviteReq
 MDM_GR_MANAGER  //管理消息
  SUB_GR_SEND_WARNING: //警告消息
   CMD_GR_SendWarning
  SUB_GR_LOOK_USER_IP: //查看地址
      CMD_GR_LookUserIP
  SUB_GR_KILL_USER:  //踢出用户
   CMD_GR_KillUser
  SUB_GR_LIMIT_ACCOUNS: //禁用帐户
   CMD_GR_LimitAccounts
  SUB_GR_SET_USER_RIGHT: //用户权限
   CMD_GR_SetUserRight
  SUB_GR_SEND_MESSAGE: //发送消息
   CMD_GR_SendMessage
  SUB_GR_OPTION_SERVER: //房间设置
   CMD_GR_OptionServer
 MDM_GF_FRAME  //框架消息
 MDM_GF_GAME  //游戏消息

大厅客户端与游戏房间服务器之间通信的命令号、包体
F:\ZhuQue\Game\开发库\Include>type CMD_Game.h
#define MDM_GR_LOGON    1         //房间登录
#define SUB_GR_LOGON_ACCOUNTS  1         //帐户登录
#define MDM_GR_USER     2         //用户信息
#define SUB_GR_USER_SIT_REQ   1         //坐下请求
//请求坐下
struct CMD_GR_UserSitReq
{
 WORD       wTableID;       //桌子位置
 WORD       wChairID;       //椅子位置
 BYTE       cbPassLen;       //密码长度
 TCHAR       szTablePass[PASS_LEN];    //桌子密码
};


// center server
CAttemperEngineSink::OnEventSocketRead
 MDM_CS_SERVER_LIST:  //列表消息
  SUB_CS_GET_SERVER_LIST:  //获取列表
 MDM_CS_SERVER_MANAGER: //房间管理
  SUB_CS_REG_GAME_SERVER:  //房间注册
  SUB_CS_UNREG_GAME_SERVER:  //注销房间
  SUB_CS_SERVER_ONLINE_COUNT:  //更新人数

本机SVN:hxhdell,123
简单接口实现规范
预备知识:
C++的基础概念,特别是虚函数和多态
COM
chap1 整体概念
§1概要说明
之所以称之为“简单接口”,是相对于COM和CORBA组件而言。
运用简单接口可以很容易写出模块化的插件,例如,可以将棋牌类客户端做成插件形式,但外观可以使用公用的界面框架,也可以嵌入到游戏大厅里。
简单接口实现的组件将来改造成ActiveX组件也很容易。
§2名词解释
一、图示
接口IFoo与接收器IFooSink之间的关系
服务:CFoo实现接口IFoo
客户:CExtern实现接口IFooSink
调用模型:
调用方保存着被调用方的基础接口指针(钩子),调用方直接调用接口指针里面方法,方法具体实现逻辑由该接口的派生类实现。
二、说明
1、接口IFoo
一组纯虚函数的集合。
实现时,是个头文件,里面全是纯虚函数。C++里就是一个纯虚函数表vfnTable。
2、服务CFoo
实现接口的组件,供客户应用程序调用,我们称此组件提供了一个支持接口的服务,或简单理解为Server也可以。
服务一般以DLL或lib库和接口的头文件一起提供。最好还有一个说明文档。
3、客户CExtern
使用接口的程序,一般是调用接口的具体程序,也可以理解为Client。
一般客户都是独立成为一个应用程序。
CExtern表示外部模块。
4、回调接口IFooSink
一般定义为以Sink为结束的接口,表明此接口是供IFoo回调的。
Sink的英文意思是接收器。
客户通过接口调用服务的相关方法后,需要知道这些方法是否执行成功。
(1)由于服务可能是异步模式,所以客户并不能马上通过方法的返回值获得。
(2)或者,服务希望通过调用客户的一些固定的函数来通知客户事件发生。
这时,就需要用到回调接口。
5、多接口和多回调接口
Ⅰ、多接口
任何一个客户,都可能用到多个服务。
Ⅱ、多回调接口
同时,一个客户,也可能实现多个回调接口。
——C++多继承的情形
§3 模块之间通信方式比较:基于接口和基于类共享的方法的比较
chap2接口的具体实现
§1接口定义样板
文件IFoo.h
Release释放对象,见下面的说明“接口对象的销毁”
Add
Delete
接口是一经发布尽可能少修改
一些重要的虚函数定义时要加一个dwReserved参数,便于将来扩充。
§2接口对象的创建:即服务的实例化
一般我们将接口实现放在一个DLL中,然后通过DLL的输出函数实例化接口对象。
三、先实例化服务,再实例化客户
我们的游戏服务器和游戏框架,就是采用这种方式。
§3接口对象的销毁
接口对象的销毁,不应该由客户用delete来完成。
一般,接口对象都提供一个Release虚函数,自己负责销毁自己。
§4 关于__stdcall和__cdecl
在VC环境里,主要有这两种调用模式[调用约定]。
VC缺省情况下,使用__cdecl。而在COM中为了保证接口的无歧义性,显式地定义了其接口函数。
简单接口规范中也要求这样做。
有两类函数需要使用这个定义:
简单接口的虚表函数(即接口);
DLL的输出函数或Lib库的全局函数。
§5辅助类:帮您创建接口
一、接口的辅助类CTempldateHelper
一般一个接口对应一个CTempldateHelper类,帮助创建和维护一个接口对象,免除加载、释放dll、查找和执行输出函数、版本管理之苦。
F:\ZhuQue\Game\开发库\Include>type Module.h
二、类对象工厂类CFactoryTemplate
F:\ZhuQue\Game\开发库\Include>type Factory.h
三、版本实现方法和规范
对于一个接口,我们定义一个DWORD dwVersion,用来规范版本号。
4个字节分别是产品版本、主要版本、次要版本、编译版本
强制升级:服务的改变,必须要求客户也发生改变。
兼容升级:服务的改变,旧的客户可以不发生改变。
//版本比较
inline bool InterfaceVersionCompare(DWORD dwQueryVer, DWORD dwInterfaceVer)
{
 if (GetProductVer(dwQueryVer)!=GetProductVer(dwInterfaceVer)) return false;
 if (GetMainVer(dwQueryVer)!=GetMainVer(dwInterfaceVer)) return false;
 if (GetSubVer(dwQueryVer)>GetSubVer(dwInterfaceVer)) return false;
 return true;
}
当客户调用服务时,需要把客户自己认为对应的的服务版本号dwQueryVer传给服务。然后由服务决定是否能提供服务。
首先,比较产品版本、主要版本,如果不相同,肯定拒绝。
如果产品版本、主要版本同,然后比较次要版本,如果客户高,则服务拒绝服务,如果客户低,则可以提供服务。
这个工作,一般在服务的创建过程中实现。即dll中export的Create函数。
§9同时对dll共享方式和lib静态链接方式的支持
大的模块可以用dll方式共享,小的模块可打包到lib中,用户可静态链接到程序中。
Win32提供的同步方法有:临界区、事件、互斥、旗语[信号灯]。
临界区一般用于一个对象内部的数据同步。
事件可用于多个对象的同步。
互斥用于两个对象的同步。
旗语用于指定数量对象的同步。
§2字节对齐问题
在定义结构的地方加上结构对齐的前置指令#pragma
chap5一些规范
§1接口和回调接口,谁使用On
一般我们认为回调接口,都是On,因为他代表事件。
但对于谁是回调接口,在应用中大家有争议。
§2工程
作为服务的工程,要考虑尽量少依赖外部的东西。
是否依赖于MFC。

朱雀棋牌,基于6601内核引擎(dll文件版本却是6610)
1、用户数据库|用户基本信息表
WHGameUserDB库|dbo.UserAccounts表
用户标识UserID
用户账号=注册账号
2、金币库|锁定游戏用户表
WHTreasureDB库、QPTreasureDB库|GameScoreLocker表
UserID
游戏种类KindID
房间索引ServerID
锁定日期CollectDate
3、
游戏种类列表GameKindItem
游戏分类列表GameTypeItem
KindID|游戏分类TypeID|KindName|ProcessName
10|财富游戏1|斗地主|LandCrazy.exe
303|麻将游戏4|转转麻将|SparrowZZ.exe
310|麻将游戏4|益阳麻将|SparrowYY.exe
168||超级捕鱼
4、
查询金币信息表:
select * from GameScoreInfo where UserID=4073
5、
房间服属性pServerAttribute(椅子数、游戏名、房间服名,房间倍率,用户性别0男1女)
F:\ZhuQue\Game\开发库\Include>type GameFrame.h
//结构体定义
//房间属性
struct tagServerAttribute
{
        WORD                                                    wKindID;
                                                //类型标识
        WORD                                                    wServerID;
                                                //房间标识
        WORD                                                    wGameGenre;
                                                //游戏类型
        WORD                                                    wChairCount;
                                        //椅子数目
        DWORD                                                   dwVideoAddr;
                                        //视频地址
        BYTE                                                    cbHideUserInfo;
                                        //隐藏信息
        TCHAR                                                   szKindName[KIND_
LEN];                           //类型名字
        TCHAR                                                   szServerName[SER
VER_LEN];                       //房间名称
        WORD                                                    wSortID;
                                                //排序号码
        LONG                                                    lCellScore;
                                                //房间底分
};
6、
数据库地址信息(1433,1812048064("192.168.1.108"),"sa","123","QPServerInfoDB"(平台数据库))
F:\ZhuQue\Game\开发库\Include>type GlobalService.h
//数据库名字
const TCHAR szGameUserDB[]=TEXT("QPGameUserDB");
                //用户数据库
const TCHAR     szTreasureDB[]=TEXT("QPTreasureDB");
                //财富数据库
const TCHAR szServerInfoDB[]=TEXT("QPServerInfoDB");
        //房间数据库
7、服务器部署
radmin22连接外网
外网4号服务器Server2003企业版
电信IP:222.240.205.10
网通IP:58.20.54.240
内网地址:10.0.0.4
账号:administrator
密码:cbwwebSER#2011-8-20
DB:sa 8822912
108主机:administrator 86217502->123
DB:sa 86217502->123
198主机(同1.108)
捕鱼Demo版:用户名t1 密码a

2016-6-22 21:23添加:
加解密工具MakeGUID.exe
#include "WHEncrypt.h"
// 使用 Unicode 字符集或者使用多字节字符集均可正常编译运行
 // 读取配置表中的密文
 TCHAR psz2[MAX_ENCRYPT_LEN]={0};
 LPCTSTR psz1=_T("000C003D002900184823481718BE1890678467B14AE14AD43D6C3D422CD62CE3000C003E002900074823481718BE18886784152A4AE123B33D6C62FC2CD63A9F");
 //DWORD dwReadCount=_tcslen(psz1);

 // 解密得到明文
 CWHEncrypt WHEncrypt;
 bool ret=WHEncrypt.XorCrevasse(psz1,psz2,MAX_ENCRYPT_LEN);
 int a=0;
 AfxMessageBox(psz2);//114.55.52.46

http://www.cnblogs.com/huangfr/archive/2012/08/09/2629687.html
右击系统数据库master,新建查询
执行以下SQL代码:
RESTORE DATABASE QPFcBallDB
FROM DISK = 'F:\Hanxiaohua\DB__2011-12-20\QPFcBallDB.bak'   --bak文件路径
with replace,
MOVE 'QPFcBallDB' TO 'F:\Hanxiaohua\DBData\QPFcBallDB.mdf',   --mdf文件路径
MOVE 'QPFcBallDB_log' TO 'F:\Hanxiaohua\DBData\QPFcBallDB.ldf'   --ldf文件路径

RESTORE DATABASE QPGameUserDB
FROM DISK = 'F:\Hanxiaohua\DB__2011-12-20\QPGameUserDB.bak'   --bak文件路径
with replace,
MOVE 'QPGameUserDB' TO 'F:\Hanxiaohua\DBData\QPGameUserDB.mdf',   --mdf文件路径
MOVE 'QPGameUserDB_log' TO 'F:\Hanxiaohua\DBData\QPGameUserDB.ldf'   --ldf文件路径

RESTORE DATABASE QPTreasureDB
FROM DISK = 'F:\Hanxiaohua\DB__2011-12-20\QPTreasureDB.bak'   --bak文件路径
with replace,
MOVE 'QPTreasureDB' TO 'F:\Hanxiaohua\DBData\QPTreasureDB.mdf',   --mdf文件路径
MOVE 'QPTreasureDB_log' TO 'F:\Hanxiaohua\DBData\QPTreasureDB.ldf'   --ldf文件路径

RESTORE DATABASE QPServerInfoDB
FROM DISK = 'F:\Hanxiaohua\DB__2011-12-20\QPServerInfoDB.bak'   --bak文件路径
with replace,
MOVE 'QPServerInfoDB' TO 'F:\Hanxiaohua\DBData\QPServerInfoDB.mdf',   --mdf文件路径
MOVE 'QPServerInfoDB_log' TO 'F:\Hanxiaohua\DBData\QPServerInfoDB.ldf'   --ldf文件路径


RESTORE FILELISTONLY FROM DISK = N'F:\Hanxiaohua\DB__2011-12-20\QPWebDB.bak' --备份文件存放路径
--看LogicalName,一般会有两个文件,如:
--QPWeb      --主逻辑文件名称
--QPWeb_log  --日志逻辑文件名称
RESTORE DATABASE QPWebDB
 FROM DISK = 'F:\Hanxiaohua\DB__2011-12-20\QPWebDB.bak'   --bak文件路径
with replace,
 MOVE 'QPWeb' TO 'F:\Hanxiaohua\DBData\QPWebDB.mdf',   --mdf文件路径
MOVE 'QPWeb_log' TO 'F:\Hanxiaohua\DBData\QPWebDB.ldf'   --ldf文件路径

SELECT * FROM [qpaccountsdb].[dbo].[AccountsInfo] where UserID>=80784 and UserID<=80786 or UserID=80719
UPDATE    [qptreasuredb].[dbo].[GameScoreInfo]
SET              Score = 10000, Revenue = 20000, InsureScore = 30000
WHERE     UserID>=80784 and UserID<=80786 or UserID=80719
UPDATE    [qpaccountsdb].[dbo].[AccountsInfo]
SET       Accounts= 'hxh001', NickName = 'hxh001', RegAccounts = 'hxh001'
WHERE     UserID=80784
UPDATE    [qpaccountsdb].[dbo].[AccountsInfo]
SET       Accounts= 'hxh00'+convert(varchar(20),UserID-80783), NickName = 'hxh00'+convert(varchar(20),UserID-80783),
RegAccounts = 'hxh00'+convert(varchar(20),UserID-80783)
WHERE     UserID>=80784 and UserID<=80786

UPDATE    GameScoreInfo
SET              Score = 10000, Revenue = 20000, InsureScore = 30000
WHERE     (UserID = 80719)
DELETE FROM GameScoreLocker
WHERE     (UserID >= 80784) AND (UserID <= 80786) OR
                      (UserID = 80719)
SELECT     UserID, KindID, ServerID, EnterID, EnterIP, EnterMachine, CollectDate
FROM         GameScoreLocker
WHERE     (UserID >= 80784) AND (UserID <= 80786) OR
                      (UserID = 80719)
在VS2012中使用SQL Server 2012 Express LocalDB打开SQL Server 2005/2008数据库(.mdf和.ldf或者.bak)
服务器名填写:(LocalDB)\v11.0,表示连接到v11.0实例
RESTORE FILELISTONLY FROM DISK = N'F:\ZhuQue\Ewin数据库\QPAccountsDB.bak' --备份文件存放路径
RESTORE DATABASE QPAccountsDB
  FROM DISK = 'F:\ZhuQue\Ewin数据库\QPAccountsDB.bak'   --bak文件路径
with replace,
MOVE 'QPAccountsDB' TO 'F:\ZhuQue\LocalDB\QPAccountsDB.mdf',   --mdf文件路径
MOVE 'QPAccountsDB_log' TO 'F:\ZhuQue\LocalDB\QPAccountsDB_log.ldf'   --ldf文件路径

C:\Users\DELL->Cd %ProgramFiles%\Microsoft SQL Server\110\Tools\Binn
C:\Program Files\Microsoft SQL Server\110\Tools\Binn>SqlLocalDB.exe /?
Microsoft (R) SQL Server Express LocalDB 命令行工具
版本 11.0.2100.60
版权所有 (c) Microsoft Corporation。保留所有权利。

C:\Documents and Settings\Hapigame>sqlcmd /?
Microsoft (R) SQL Server 命令行工具
版本 10.50.6000.34 NT INTEL X86【对应Sql Server 2008】
版本 9.00.1399.06 NT INTEL X86【对应Sql Server 2005】
版本 11.0.2100.60 NT x64【对应Sql Server 2012】
版权所有 (c) Microsoft Corporation。保留所有权利。
用法: Sqlcmd            [-U 登录 ID]          [-P 密码]
  [-S 服务器]            [-H 主机名]          [-E 可信连接]
  [-N 加密连接][-C 信任服务器证书]
  [-d 使用数据库名称] [-l 登录超时值]     [-t 查询超时值]
  [-h 标题]           [-s 列分隔符]      [-w 屏幕宽度]
  [-a 数据包大小]        [-e 回显输入]        [-I 允许带引号的标识符]
  [-c 命令结束]            [-L[c] 列出服务器[清除输出]]
  [-q "命令行查询"]   [-Q "命令行查询" 并退出]
  [-m 错误级别]        [-V 严重级别]     [-W 删除尾随空格]
  [-u unicode 输出]    [-r[0|1] 发送到 stderr 的消息]
  [-i 输入文件]         [-o 输出文件]        [-z 新密码]
  [-f <代码页> | i:<代码页>[,o:<代码页>]] [-Z 新建密码并退出]
  [-k[1|2] 删除[替换]控制字符]
  [-y 可变长度类型显示宽度]
  [-Y 固定长度类型显示宽度]
  [-p[1] 打印统计信息[冒号格式]]
  [-R 使用客户端区域设置]
  [-b 出错时中止批处理]
  [-v 变量 = "值"...]  [-A 专用管理连接]
  [-X[1] 禁用命令、启动脚本、环境变量[并退出]]
  [-x 禁用变量替换]
  [-? 显示语法摘要]
 
C:\Documents and Settings\Hapigame>sqlcmd -S "CCNET-F5FB91A41" -U "hpkj888" -P "hpkj8888"

C:\Documents and Settings\Hapigame>sqlcmd -S "61.164.110.131" -U "hpkj888" -P "hpkj8888"
1> :ServerList
服务器:
    CCNET-F5FB91A41
    LENOVO-6VTD1742
    MEDIA
    RAFDASERVER02
    SERVER
    WIN-4A1T5PFRNLO
    WIN-51937I9DDE4
    WIN-82VFPHGQ1AO
    WIN-GFSAMM4VFFR
1> exit







你可能感兴趣的:(网狐棋牌框架学习笔记(20160524、20160617、20160622、20160702))