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

简介:

一:数据库设计

到此为止,打老鼠游戏还不能保存每次游戏的成绩,我们今天完成的任务就是要存储成绩到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进行赋值吧。


本文转自最课程陆敏技博客园博客,原文链接:http://www.cnblogs.com/luminji/p/4401797.html,如需转载请自行联系原作者

相关文章
|
存储 C# 数据安全/隐私保护
c#/.net用txt、in等作为数据存储的配置类
using System; using System.Collections.Generic; using System.Text; using System.
808 0
|
存储 Go SQL
.net海量分页数据存储过程
前一段时间做了一个海量的数据存储过程,并做了一个测试版的程序。希望对大家有所帮助。 网上很多这样的存储过程,但是依次试过之后,还是这样的分页较好,并且网上很少有测试程序,即使找到了存储过程,但是调用过程也极为麻烦。
646 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
38 0
|
30天前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
28 0
|
30天前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
95 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
123 0
|
8月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
114 0
|
9月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
113 0