(二十八)数据库开发

1. 创建一个数据库

image

2. 创建数据库模块

都是类库

2.1 抽象基类模块

  • 所有表的实体抽象基类
  • CRUD的接口
    image

2.2 SQLServer数据库模块

  • nuggets包安装
  • 添加引用
  • 添加生成事件
  • 添加模块配置类
    image

3.EF框架生成数据库映射实体

  • 添加实体数据模型
    image
    image

  • 一般服务器名如果是本机就是“.”
    image
    image
    image

  • 自动生成的类对应数据库的表
    image

  • 数据库连接字符串
    image

  • EF通过连接字符串找到配置信息,包括用户名密码数据库名等,与数据库进行连接
    image

4.用户表CRUD业务

member需要继承基类,但是EF生成的没有继承,所有可以创建一个部分类来继承,但是注意命名空间需要一致
image
用户仓库接口
image
实现类:
要创建仓储上下文
UpperDBEntities db = new UpperDBEntities();
image

shell需要添加EF框架,并且引用抽象数据库模块

5.用户登录

注册到IOC中方便其他模块调用
image
shell安装ef
image
验证方式改为数据库验证
image

报错解决:
image
把数据库层app.config的这一段配置复制到shell的app.config中
image
C#常用加密解密方法(MD5加密解密)

6.用户登录的Session保存和显示

6.1 md5加密

/// <summary>
/// 获得32位的MD5加密
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static string GetMD5_32(string input)
{
    System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
    byte[] data = md5.ComputeHash(Encoding.Default.GetBytes(input));
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < data.Length; i++)
    {
        sb.Append(data[i].ToString("x2"));
    }
    return sb.ToString();
}

数据库保存的是加密后的密码
image

6.2 Session

在share做个接口
image
在login的model中实现
image
session在vm的构造函数引入
使用:
image

7. 创建温度数据表并重新映射实体类

创建数据表
image
在程序中更新模型
image
选中表
image
创建接口
image
并创建温度的部分类继承基类
image
然后实现温度接口,和用户表一样,仓储的实例化可以提取到抽象基类中做。
image
image

8. 采集温度数据写入数据库

创建虚拟数据

image

在main模块的vm保存数据

image

9.切换温度历史数据界面

图标绑定命令
image
直接导航
image
切换到温度界面还可以用事件聚合器做,如果把按钮做在别的模块时。

10. 查询数据库记录并绑定到DataGrid

做一个筛选栏
image
表格的设置和绑定
image
然后做查询
image

11.数据导出到本地csv文件

导出方法:
image

 /// <summary>
 /// 导出CSV助手
 /// </summary>
 public  class ExportHelper
 {
     public static void Export<T>(ObservableCollection<T> array,string filename=null)
     {
         var t=typeof(T);
         var properties=t.GetProperties(System.Reflection.BindingFlags.Instance|System.Reflection.BindingFlags.Public );
         var stringBuilder=new StringBuilder();

         //标题
         foreach( var item in properties )
         {
             stringBuilder.Append(item.Name);
             stringBuilder.Append(",");
         }
         stringBuilder.Append("\r\n");//回车

         //内容

         foreach( var model in array)
         {
             var row=new StringBuilder();
             foreach(var property in properties )
             {
                 var val=property.GetValue(model);//返回当前属性的值
                 row.Append(val.ToString());
                 row.Append(",");
             }
             stringBuilder.Append(row.ToString());
             stringBuilder.Append("\r\n");//回车
         }

         if (string.IsNullOrEmpty(filename))
         {
             var date = $"{DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")}";
             filename = $"{date}.csv";
         }
         else
         {
             filename = $"{filename}";
         }
         //写入文件
         File.WriteAllText(filename, stringBuilder.ToString());
     }
 }
posted @ 2024-03-05 13:02  huihui不会写代码  阅读(53)  评论(0)    收藏  举报