我们在开发 WPF 桌面应用程序时,数据库存的利用是必不可少的,除非你的应用没有数据存储的需求,有了数据存储需求,我们就会面临利用什么样的数据库的选择题目,我的选择方案是,单机版的应用我优先选择 Sqlite,如果钓多台电脑必要数据共享我优先MySql 8.0+,Sqlite 和MySql 都支持尺度的SQL 布局查询语句,数据库的切换也不必要额外大量的开发工作。单机版利用Sqlite ,免去 MySql 安装过程,减少用户的操作,降低利用门槛。
之前的许多应用都是利用 MySql 。现在记录下对 Sqlite 数据的基本利用。
准备两张表和C# 实体类,代码如下
- public class BaseEntity
- {
- public Int64 id;
- public Int64 Id
- {
- get
- {
- return id;
- }
- set
- {
- id = value;
- }
- }
- }
复制代码- //车辆作息
- public class Car : BaseEntity
- {
- public string carNumber;
- public decimal traeWeight;
- public string driver;
- public string driverMobile;
- }
复制代码- //货物信息 Material
- public class Marteral :BaseEntity
- {
- public string name;
- public string firstCase;
- }
复制代码
对应的表布局
- CREATE TABLE "main"."marteral" (
- "id" INTEGER NOT NULL,
- "name" TEXT(255) DEFAULT NULL,
- "first_case" TEXT(255) DEFAULT NULL,
- PRIMARY KEY ("id" ASC)
- );
- CREATE TABLE "main"."car" (
- "id" bigint NOT NULL,
- "car_number" TEXT(255) DEFAULT NULL,
- "trae_weight" real(10,3) DEFAULT '0.000',
- "driver" TEXT(255) DEFAULT NULL,
- "driver_mobile" TEXT(255) DEFAULT NULL,
- "driver_idnumber" TEXT(255) DEFAULT NULL,
- PRIMARY KEY ("id" ASC)
- )
- ;
复制代码 第一步 在Nuget中 引入 Sqlite的库。
的代码中引入 定名空间
- using System.Data;
- using Microsoft.Data.Sqlite;
复制代码 第二步 连接Sqlite。
构建连接字符串
- /// <summary>
- ///
- /// </summary>
- /// <param name="file">sqlite databases file </param>
- /// <returns></returns>
- private static string GetConnString(string file)
- {
- var connStr = new SqliteConnectionStringBuilder()
- {
- DataSource = file,
- Pooling = true,
- // 注意 Mode的值 , SqliteOpenMode.ReadWriteCreate表示不存在文件时
- //会自动创建
- Mode = SqliteOpenMode.ReadWriteCreate,
- }.ConnectionString;
- return connStr;
- }
复制代码 连接
- public bool Connection()
- {
- bool res = false;
- //db file is not exist,
- using (SqliteConnection connection = new SqliteConnection(GetConnString(dbfile)))
- {
- if (connection.State != ConnectionState.Open)
- {
- connection.Open();
- res = connection.State == ConnectionState.Open;
- }
- }
- return res;
- }
复制代码 第三步 利用。
添加数据
- //各添加10万条数
- private void InsertBtn_Click(object sender, RoutedEventArgs e)
- {
- int total = 100000;
- for (int i = 0; i < total; i++)
- {
- Marteral m = new Marteral()
- {
- id = i+1,
- name = "原煤"+i,
- firstCase = "YM"+i,
- };
- int res = -1;
- if(i% 2 == 0)
- {
- string sql = SqlBuilder.GetInsertSql(m);
- res = SqliteHelper.Instance.Insert(sql);
- }
- else
- {
- res = SqliteHelper.Instance.Insert(m);
- }
- if(res >= 0)
- {
- Debug.WriteLine($"{m.name} inseert successed;");
- }
- else
- {
- Debug.WriteLine($"{m.name} inseert errored;");
- }
- }
- for (int i = 0; i < total; i++)
- {
- Car c= new Car()
- {
- id = i+1,
- carNumber = "云DDD73" + i,
- driver = "驾驶员" + i,
- driverMobile = "1580874631" +i,
- };
- int res = -1;
- if (i % 2 == 0)
- {
- string sql = SqlBuilder.GetInsertSql(c);
- res = SqliteHelper.Instance.Insert(sql);
- }
- else
- {
- res = SqliteHelper.Instance.Insert(c);
- }
- if (res >= 0)
- {
- Debug.WriteLine($"{c.carNumber} inseert successed;");
- }
- else
- {
- Debug.WriteLine($"{c.carNumber} inseert errored;");
- }
- }
- }
复制代码 修改数据
- private void UpdateBtn_Click(object sender, RoutedEventArgs e)
- {
- for (int i = 0; i < 5; i++)
- {
- Marteral m = new Marteral()
- {
- id = i + 1,
- name = "精煤煤" + i,
- firstCase = "JM" + i,
- };
- int res = -1;
- if (i % 2 == 0)
- {
- string sql = SqlBuilder.GetUpdateSql(m);
- res = SqliteHelper.Instance.Update(sql);
- }
- else
- {
- res = SqliteHelper.Instance.Update(m);
- }
- if (res >= 0)
- {
- Debug.WriteLine($"{m.name} Update successed;");
- }
- else
- {
- Debug.WriteLine($"{m.name} Update errored;");
- }
- }
- for (int i = 0; i < 5; i++)
- {
- Car c = new Car()
- {
- id = i + 1,
- carNumber = "云AAA73" + i,
- driver = "驾驶员" + i,
- driverMobile = "1580874631" + i,
- };
- int res = -1;
- if (i % 2 == 0)
- {
- string sql = SqlBuilder.GetUpdateSql(c);
- res = SqliteHelper.Instance.Update(sql);
- }
- else
- {
- res = SqliteHelper.Instance.Update(c);
- }
- if (res >= 0)
- {
- Debug.WriteLine($"{c.carNumber} Update successed;");
- }
- else
- {
- Debug.WriteLine($"{c.carNumber} Update errored;");
- }
- }
- }
复制代码
删除数据
- // id % 2 == 0 的数据删除
- private void DeleteBtn_Click(object sender, RoutedEventArgs e)
- {
- for (int i = 0; i < 5; i++)
- {
- Marteral m = new Marteral()
- {
- id = i + 1,
- name = "精煤煤" + i,
- firstCase = "JM" + i,
- };
- int res = -1;
- if (i % 2 == 0)
- {
- string sql = SqlBuilder.GetDeleteSql(m);
- res = SqliteHelper.Instance.Delete(sql);
- }
-
- if (res >= 0)
- {
- Debug.WriteLine($"{m.name} Delete successed;");
- }
- else
- {
- Debug.WriteLine($"{m.name} Delete errored;");
- }
- }
- for (int i = 0; i < 5; i++)
- {
- Car c = new Car()
- {
- id = i + 1,
- carNumber = "云AAA73" + i,
- driver = "驾驶员" + i,
- driverMobile = "1580874631" + i,
- };
- int res = -1;
- if (i % 2 == 0)
- {
- string sql = SqlBuilder.GetDeleteSql(c);
- res = SqliteHelper.Instance.Delete(sql);
- }
-
- if (res >= 0)
- {
- Debug.WriteLine($"{c.carNumber} Delete successed;");
- }
- else
- {
- Debug.WriteLine($"{c.carNumber} Delete errored;");
- }
- }
- }
复制代码 查询并在日志在打印内容
- private void SelectBtn_Click(object sender, RoutedEventArgs e)
- {
- string sql = SqlBuilder.GetSelectSql("car", "", "");
- List<Car> cars = SqliteHelper.Instance.Select<Car>(sql);
- cars.ForEach((c) => { Debug.WriteLine(c.carNumber+" trae:"+c.traeWeight); });
- string sql2 = SqlBuilder.GetSelectSql("marteral", "", "");
- List<Marteral> ms = SqliteHelper.Instance.Select<Marteral>(sql2);
- ms.ForEach((m) => { Debug.WriteLine(m.name); });
- }
复制代码 最后
代码仓库:sqlite_demo: C# WPF 桌面应用程序,数据存储利用Sqlite ,这是一个数据基本操作的基本Demo
感谢各位朋友的阅读,有不足之处,望指正。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |