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

简介: 一:数据库设计 到此为止,打老鼠游戏还不能保存每次游戏的成绩,我们今天完成的任务就是要存储成绩到SQLSERVER的数据库中。 在上节课中,我们已经知道了如何创建数据库,所有,先创建数据库“MouseGame”,然后,按如下的数据格式建立一个数据表(表名:GameRecord):   二:数据库读写 数据库的读写部分,请查看下节视频。

一:数据库设计

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

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

wps_clip_image-19041

 

二:数据库读写

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

wps_clip_image-19185

 

三:视频

非公开部分,请联系最课程(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进行赋值吧。

Creative Commons License本文基于 Creative Commons Attribution 2.5 China Mainland License发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名 http://www.cnblogs.com/luminji(包含链接)。如您有任何疑问或者授权方面的协商,请给我留言。
目录
相关文章
|
存储 C# .NET
.NET之美 第一部分C#语言基础
第一章 类型基础 1 值类型与引用类型   CLR 支持两种类型:值类型和引用类型,       C#的所有值类型均隐式派生自System.ValueType: 结构体:struct(直接派生于System.
893 0
|
Java .NET 程序员
《.NET程序员面试秘笈》----面试题15 .NET程序是如何编译的
【考点】CLR的知识,中间语言的知识。
2048 0
|
SQL NoSQL 关系型数据库
.NET5真的来了,你准备好了吗?
.NET5真的来了,你准备好了吗?
199 0
.NET5真的来了,你准备好了吗?
|
C#
《.NET之美》消息及勘误
《.NET之美》消息及勘误 编辑最终还是采用了《.NET之美》作为书名,尽管我一直觉得这个名字有点文艺了,而更倾向于使用《.NET专题解析》这个名称。 目前已经可以在各大网上书店购买了,亚马逊的地址是:《.NET之美》 我对这本书算不上特别满意,但是对很多刚转向.NET的朋友也还是会有一些帮助吧。
872 0
《你必须知道的.net》读书笔记 001——1.1 对象的旅行
    好久没看书了,上次看书的时候还是一年前了,一个偶然的机会,比较系统的看了一下OO的基础,封装、继承、多态等,当时真的是很不会,看了也是一知半解,迷迷糊糊的。在实际中的项目里也没敢一下子应用OO,还是用自己比较拿手的面向过程来应对项目,然后一点一点使用OO的技巧来代替一部分的代码(或者叫做功能)。
899 0
|
测试技术
.net 开发的奇淫巧计
随机数 Random random = new Random(( int)DateTime .Now.Ticks & 0x0000FFFF);     如何让ASP.NET Web API显示完整的错误信息,并显示错误堆栈? 在ASP.
1488 0
|
Windows
艾伟:.Net架构网站又一传奇:PlentyOfFish.com
这个叫PlentyOfFish的网站,  它只有一个员工,每天只干两小时活,但是却被估值$1000000000。 PlentyOfFish在山姆大叔家里算是一个很火的online dating网站,网站取名字来自这句话:There is plenty of fish in the sea. 对应的中文意思是“天涯何处无芳草”。
1522 0

热门文章

最新文章