• 让我们一起用开源数据库和开源框架废弃Access


    一、为什么要废弃Access?

    1.客户的机子上需要安装access的驱动

    ps:这个比较烦人,大家都知道部署越简单越好,安装这个对用户来说太繁琐了.

    2.操作时性能不佳

    using System;
    using Moon_Sqlite;
    using Moon.Orm;
    using Moon.Orm.Util;
    namespace testsome
    {
        class Program
        {
            public static void Main(string[] args)
            {
                //添加数据
                using (var db=Db.CreateDefaultDb()) {
                    /*清空数据表
                    db.Remove<ScoreSet>();
                    db.Remove<StudentSet>();
                    db.Remove<ClassSet>();
                     */
                    //添加数据
                    Class cl=new Class();
                    cl.ClassName="班级"+DateTime.Now.ToString();
                    cl.ClassLevel=1;
                    db.Add(cl);
                    Console.WriteLine("添加[班级]成功,ID={0}",cl.ID);
                    
                    Student stu=new Student();
                    stu.Age=12;
                    stu.BirthDay=DateTime.Now;
                    stu.Class_ID=cl.ID;
                    stu.Name="张三"+DateTime.Now;
                    stu.Sex=true;
                    db.Add(stu);
                    Console.WriteLine("添加[学生]成功,ID={0}",stu.ID);
                    
                    Score sco=new Score();
                    sco.Score_=98;
                    sco.Student_ID=stu.ID;
                    db.Add(sco);
                    Console.WriteLine("添加[分数]成功,ID={0}",stu.ID);
                    
                    //跟新数据
                    Score update=new Score();
                    update.Score_=100;
                    update.WhereExpression=ScoreSet.ID.Equal(sco.ID);
                    db.Update(update);
                }
                //查询数据
                using (var db=Db.CreateDefaultDb()) {
                    //连接查询
                    var mqlJoin=ScoreSet.SelectAll()
                        .InnerJoin(StudentSet.Select(StudentSet.Name))
                        .InnerJoin(ClassSet.Select(ClassSet.ID.AS("ClassID"),ClassSet.ClassName))
                        .ON(ScoreSet.Student_ID.Equal(StudentSet.ID)
                            .And(StudentSet.Class_ID.Equal(ClassSet.ID) )
                           );
                    //查看当前sql
                    var sql=mqlJoin.ToDebugSQL();
                    var list=db.GetDictionaryList(mqlJoin);
                    //展示数据
                    list.ShowInConsole();
                    
                    //让我们无需实体类
                    string sql2=mqlJoin.ToParametersSQL();
                    dynamic dlist=db.GetDynamicList(sql2,"自定义类名");
                    foreach (dynamic entity in dlist) {
                        Console.WriteLine(entity.ID+" "+entity.Score+" "+entity.Student_ID+" "+entity.Name+" "+entity.ClassID+" "+entity.ClassName);
                    }
                    //获取实体集
                    var entityList=db.GetEntities<Score>(ScoreSet.SelectAll().Where(ScoreSet.ID.BiggerThan(0)));
                    
                    
                }
                Console.Write("Press any key to continue . . . ");
                Console.ReadKey(true);
            }
        }
    }

    ps:用过access的人们都知道,这个东西数据量大的时候查询起来很费时间.

    3.没有事务支持

    实际项目中很多操作需要原事务支持的,至于事务的存在大家应该都懂,access咱们就不说它多坏了

    4.平台支持问题

    如果我们把我们的项目部署在linux上,这个时候估计就歇菜了.

    二、怎么用开源的东西废弃Access

    1.这里我们推荐使用sqlite,至于sqlite是什么大家应该比较清楚,

    简单而言:类似access,本地型文件数据库,支持事务,标准sql,性能在开源本地文件数据库中挺好.支持其他操作系统.

    2.数据库的操作用什么框架呢?

    这里就毛遂自荐,推荐使用moon.orm标准版.

    源代码下载地址:http://pan.baidu.com/s/1i3xj0f7

     (关于源码解压请邮件 qsmy_qin@163.com)

    三、用实际例子来看看sqlite

    1.使用sqlite的管理工具.(推荐sqliteExpert)

    2.建立如下库表

    三张表:班级、 学生、分数

    CREATE TABLE [Student] (
      [ID] INTEGER NOT NULL PRIMARY KEY ON CONFLICT ROLLBACK, 
      [Name] VARCHAR(50) NOT NULL, 
      [Age] INT NOT NULL, 
      [BirthDay] DATETIME NOT NULL, 
      [Sex] BOOLEAN NOT NULL, 
      [Class_ID] INTEGER NOT NULL REFERENCES [Class]([ID]));
    
    CREATE TABLE [Class] (
      [ID] INTEGER NOT NULL PRIMARY KEY ON CONFLICT ROLLBACK, 
      [ClassName] VARCHAR(50) NOT NULL, 
      [ClassLevel] INT NOT NULL);
    
    CREATE TABLE [Score] (
      [ID] INTEGER NOT NULL PRIMARY KEY ON CONFLICT ROLLBACK, 
      [Score] INT NOT NULL, 
      [Student_ID] INTEGER NOT NULL REFERENCES [Student]([ID]));

    3.使用代码生成器

    最新版本下载地址:http://lko2o.com/moon/article/9

    4.配置数据库连接

    5.生成实体层代码

    6.将生成的实体代码放入您的开发项目中

    7.配置您的项目

    8.开始编码

    该项目源代码下载

    地址:http://pan.baidu.com/s/1vyyPg

    http://pan.baidu.com/s/1vyyPg

    此项目开源直接运行

  • 相关阅读:
    [博客美化]给你博客添加一个萌萌的看板娘吧
    精简Command版SqlHelper
    使用VS2017创建EF框架实例
    Ueditor1.4.3.3 asp UTF-8版文件缺失修改方法
    android studio编译包真机安装失败解决方案记录
    ANDROID开发之问题积累及解决方案(四)
    ANDROID开发之问题积累及解决方案(三)
    ANDROID调用webservice带soapheader验证
    ANDROID开发之问题积累及解决方案(二)
    ANDROID开发之问题积累及解决方案(一)
  • 原文地址:https://www.cnblogs.com/humble/p/4593133.html
Copyright © 2020-2023  润新知