客户端用户登陆后,在主界面中可以看到本单位的所有教室,我们来看一下是如何获取的:

客户端代码:

//根据用户获取功能教室列表privatevoidGetRooms(Usersuser){//把当前用户信息发送个服务器端,并获取到本用户相关的教室列表RoomListroomList=newTcpConnection.SendReceiveObject<RoomList>("GetRooms","RoomList",5000,user);IList<Cla***oom>cla***omms=roomList.Cla***ooms;listBox1.DataSource=cla***omms;listBox1.DisplayMember="RoomName";listBox1.ValueMember="ID";}

RoomList类 (可由protobuf.net 序列化)

//根据单位名称获取功能室列表[ProtoContract]publicclassRoomList{[ProtoMember(1)]publicIList<Cla***oom>Cla***ooms;publicRoomList(){}publicRoomList(IList<Cla***oom>rooms){this.Cla***ooms=rooms;}}

服务器端的处理方法:

在构造函数中声明:

//根据用户的单位,获取所有功能教室列表NetworkComms.AppendGlobalIncomingPacketHandler<Users>("GetRooms",HandleGetRooms);

处理方法:

privatevoidHandleGetRooms(PacketHeaderheader,Connectionconnection,UserstheUser){IList<Cla***oom>theRooms=DoCla***oom.GetCla***oomByUserDep(theUser.Department);RoomListroomList=newRoomList(theRooms);//把获取到的数据发回去connection.SendObject("RoomList",roomList);}

DoCla***oom.GetCla***oomByUserDep方法

//根据用户单位获取单位的功能教室列表publicstaticIList<Cla***oom>GetCla***oomByUserDep(stringdepName){IDataReaderreader=DBCla***oom.GetCla***oomByDepName(depName);returnLoadListFromReader(reader);}

LoadListFromReader方法

DBCla***oom.GetCla***oomByDepName方法

//根据单位名称获取功能教师列表publicstaticIDataReaderGetCla***oomByDepName(stringdepartment){SqlParameterHelpersph=newSqlParameterHelper(GetWriteConnectionString(),"Cla***oom_SelectCla***oomByDepName",1);sph.DefineSqlParameter("@Department",SqlDbType.NVarChar,200,ParameterDirection.Input,department);returnsph.ExecuteReader();}

相关存储过程:

CREATEPROCEDURE[dbo].Cla***oom_SelectCla***oomByDepName@Departmentnvarchar(200)ASSELECT[Id],[RoomName],[DepID],[Department]FROM[dbo].[Cla***oom]whereDepartment=@Department