.NET零基础入门10:打老鼠之数据存储

一:数据库设计

到此为止,打老鼠游戏还不能保存每次游戏的成绩,我们今天完成的任务就是要存储成绩到SQLSERVER的数据库中。

在上节课中,我们已经知道了如何创建数据库,所有,先创建数据库“MouseGame”,然后,按如下的数据格式建立一个数据表(表名:GameRecord):

二:数据库读写

数据库的读写部分,请查看下节视频。最终,我们的成绩查看界面如下:

三:视频

非公开部分,请联系最课程(www.zuikc.com

四:将DataRow转换成Model

在上面的视频中,我们的数据库直接以Datatable的形式赋值给了前台(UI)。在实际的应用的当中,尤其是多层架构的应用当中,我们更常用的做法是将数据库记录以List<Model>(还记得List<Model>这个形式吗?我们的前台UI的Code-behind代码中,我们存储老鼠控件,用了List<PictureBox>)的形式在前后台中间进行传递,即:

下面的代码:

public DataTable GetList()

{

string sql = "select * from GameRecord";

return this.GetTable(sql);

}

最好变成:

public List<GameRecord> GetRecordList()

{

return DatatableHelper.ToList<GameRecord>(this.GetList());

}

GameRecord是什么?就是我们的游戏记录的实体类,它的实现如下:

public class GameRecord

{

#region Public Properties

public DateTime GameDateTime { get; set; }

public int GameLevel { get; set; }

public int Score { get; set; }

public int Total { get; set; }

#endregion

}

在上面的代码中,DatatableHelper的实现如下:

namespace GameSqlserverDal

{

using System;

using System.Collections.Generic;

using System.Data;

using System.Reflection;

internal class DatatableHelper

{

#region Public Methods and Operators

public static DataTable ToDataTable<T>(IEnumerable<T> list)

{

var pList = new List<PropertyInfo>();

Type type = typeof(T);

var dt = new DataTable();

Array.ForEach(

type.GetProperties(),

p =>

{

pList.Add(p);

dt.Columns.Add(p.Name, p.PropertyType);

});

foreach (T item in list)

{

DataRow row = dt.NewRow();

pList.ForEach(p => row[p.Name] = p.GetValue(item, null));

dt.Rows.Add(row);

}

return dt;

}

public static List<T> ToList<T>(DataTable dt) where T : class, new()

{

var prlist = new List<PropertyInfo>();

Type type = typeof(T);

Array.ForEach(

type.GetProperties(),

p =>

{

if (dt.Columns.IndexOf(p.Name) != -1)

{

prlist.Add(p);

}

});

var oblist = new List<T>();

foreach (DataRow row in dt.Rows)

{

var ob = new T();

prlist.ForEach(

p =>

{

if (row[p.Name] != DBNull.Value)

{

p.SetValue(ob, row[p.Name], null);

}

});

oblist.Add(ob);

}

return oblist;

}

#endregion

}

}

以我们当前的知识储备能力,我们还不能很好的理解上面这个帮助类的代码,但是没有关系,虽然我们目前写不出这个代码,但是我们一定要会用。就像我们写不出.NET Famework的API,但是我们会用好它,也是一种能力。现在,重构我们的代码,用List<GameRecord>来给我们的UI进行赋值吧。

时间: 2024-11-06 09:46:22

.NET零基础入门10:打老鼠之数据存储的相关文章

Python零基础入门(10)------- str 字符串

编程中使用频率非常高的数据类型 "str 字符串" ,字符串属于不可变序列. Python中声明字符串 使用 '单引号' 或者 "双引号" 都是可以的 . 字符串的引号前后匹配的 下面是实现多行字符串: 三个引号 """这里放放着多行文本""" 直接输出看到的 \n 代表着换行符,  这种斜杠后跟着某个字符串的字符称之为转义字符 [转义字符个人理解:表示那些在电脑上不可显示的特殊字符] print() 打印

.NET零基础入门09:SQL必知必会

一:前言 仿佛到了更进一步的时候了,每一个程序员迟早都会遇到数据存储的问题.我们拿什么来存储程序产生的数据?举例来说,用什么来存储我们的打老鼠游戏每次的成绩呢?选择如下: 1:内存中.缺点,退出游戏,数据就没了: 2:文件中.好办法!缺点,自己解析文本,把文本变成我们程序中的数据,这个解析的过程叫做协议.协议这个词听上去够恐怖吧,实际上说白了无非就是数据格式怎么样,API接口怎么样之类的东东. 3:数据库.好办法!好吧,数据库文件其实也就是硬盘上的文件,只不过数据库本身就已经为我们定义好了数据格

从零基础入门JavaScript(1)

从零基础入门JavaScript(1) 1.1  Javascript的简史 1995年的时候   由网景公司开发的,当时的名字叫livescript    为了推广自己的livescript,搭了java顺风车,改名为javascript 与此同时,     微软因此在自身的浏览器里,也推出了自己的脚本语言 jscript 1997年时候,  由ECMA(欧洲计算机制造商协会)出面,推出了一套javascript的规范,Ecmascript ,规范提出js由三部分组成 JS的组成: ECMAS

鱼C《零基础入门学习Python》10-17节课时知识点总结

第10讲:列表:一个打了激素的数组 1. 列表都可以存放一些什么东西?  我们说 Python 的列表是一个打了激素的数组,如果把数组比喻成集装箱,那么 Python 的列表就是一个大仓库,Ta 可以存放我们已经学习过的任何数据类型. 2. 向列表增加元素有哪些方法?  三种方法想列表增加元素,分别是:append().extend() 和 insert().    3. append() 方法和 extend() 方法都是向列表的末尾增加元素,请问他们有什么区别?  append() 方法是将

.NET零基础入门05:委托与事件

一:前言 本小节,我们需要停一停我们的小游戏开发,虽然它现在还不完美,还很简单,甚至还有BUG.但是,为了更好的理解C#,现在到了该深入了解一些基础知识的时候了. 当然,实际上,本小节内容对于零基础入门的初学者来说,还是有点难了.委托与事件,如果只是泛泛的说一下,可能就是一两句话.但是,我们的课程要遵循一个原则:知其然,知其所以然.所以,本小节的内容实际上有点多,但是我希望大家细细品味,争取彻底消化委托和事件这两个概念. 同时,本课程还要教会大家使用一个工具,分析代码. 二:委托的现实场景:卖家

零基础入门jQuery视频教程

零基础入门jQuery最新版开发.NET富客户端应用(选择器.DOM操作.事件和动画.Ajax应用.插件.Mobile)课程分类:.NET+Jquery适合人群:初级课时数量:35课时用到技术:javascript,ajax,jquery,handler涉及项目:各知识点的项目案例和名为JaneShop的品牌服装和包包的购物网站咨询qq:1840215592 零基础入门jQuery视频教程详细查看:http://www.ibeifeng.com/goods-425.html 零基础入门jQuer

Cloudera Manager、CDH零基础入门、线路指导 http://www.aboutyun.com/thread-9219-1-1.html (出处: about云开发)

Cloudera Manager.CDH零基础入门.线路指导http://www.aboutyun.com/thread-9219-1-1.html(出处: about云开发) 问题导读:1.什么是cloudera CM .CDH?2.CDH.CM有哪些版本?3.CDH.CM有哪些安装方式?4.CDH如何开发? <ignore_js_op> 我们知道cloudera CDH 是为简化hadoop的安装,也对对hadoop做了一些封装.那么我们就像尝试学习cloudera.cloudera本质h

鱼C《零基础入门学习Python》1—9节课时知识点总结

第一节:我和python的第一次亲密接触 0. Python 是什么类型的语言? 答:脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方式快速完成某些复杂的事情通常是创造脚本语言的重要原则,基于这项原则,使得脚本语言通常比 C语言.C++语言 或 Java 之类的系统编程语言要简单容易.也让脚本语言另有一些属于脚本语言的特性: 语法和结构通常比较简单 学习和使用通常比较简单 通常以容易修改程序的“解释”作为运行方式,而不需要

Oracle GoldenGate零基础入门培训--安装、配置、诊断

Oracle GoldenGate零基础入门培训--安装.配置.诊断课程学习地址:http://www.xuetuwuyou.com/course/158课程出自学途无忧网:http://www.xuetuwuyou.com 一.课程介绍: 本课程通过理论讲解以及实战操作的方式,向大家阐述了GoldenGate数据复制软件的产品体系.技术架构.安装配置.数据初始化.数据复制及操作.安全控制等相关内容.课程结合讲师的理解和实际工作经验对部分难点.重点.易错点进行了比较深入的探讨,希望可以为大家带来