讓我們一起用開源數據庫和開源框架廢棄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

此項目開源直接運行


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM