SQLite 数据库 C# Dapper 操作实例

1. 概述

前面写过一篇文章《C# SQLite 数据库使用说明》,介绍的是 C# 语言用最原始的 ADO.net 方式操作 SQLite 数据库。可是这种方式很久没用过了,主要是因为 Dapper 和 PetaPoco 太好了用

本文参照 DarkThread 的文章,整理了一套 C# 使用 Dapper 操作 SQLite 数据库的实例,方便自己日后查询。

2. 前置条件

本程序依赖 Nuget 上三个包:System.Data.SQLite.Core(SQLite 包包含了EF完整依赖,这里不需要使用EF)、Dapper 和 Newton.Json。

实例程序可以直接还原 Nuget 包:

SQLite 数据库 C# Dapper 操作实例_第1张图片

如需自己安装,可以参考如需图片:

SQLite 数据库 C# Dapper 操作实例_第2张图片

SQLite 数据库 C# Dapper 操作实例_第3张图片

SQLite 数据库 C# Dapper 操作实例_第4张图片

3. 程序说明

软件运行,先检查 SQLite 数据库文件是否存在。若不存在在建立 SQLiteConnection 时,SQLite 会自动创建。接着执行建表语句 CREATE TABLE 。

using Dapper;
using Newtonsoft.Json;
using System;
using System.Data.SQLite;
using System.IO;

namespace SQLiteDapper
{
    class Program
    {
        //数据库放在程序运行根目录
        static string dbPath = @".\Test.sqlite";
        static string connStr = "data source=" + dbPath;
        //测试数据
        static Player[] TestData = new Player[]
        {
            new Player("P01", "Jeffrey", DateTime.Now, 32767),
            new Player("P02", "Darkthread", DateTime.Now, 65535),
        };

        static void Main(string[] args)
        {
            //初始化数据库
            InitSQLiteDb();
            //测试插入
            TestInsert();
            //测试获取
            TestSelect();

            Console.Read();
        }

        #region 初始化数据库
        static void InitSQLiteDb()
        {
            //数据库存在则跳过
            if (File.Exists(dbPath))
            {
                return;
            }

            using (var conn = new SQLiteConnection(connStr))
            {
                conn.Execute(@"
                        CREATE TABLE Player (
                            Id VARCHAR(16),
                            Name VARCHAR(32),
                            RegDate DATETIME,
                            Score INTEGER,
                            BinData BLOB,
                            CONSTRAINT Player_PK PRIMARY KEY (Id)
                        )");
            }
        }
        #endregion

        #region 测试插入数据
        static void TestInsert()
        {
            using (var cn = new SQLiteConnection(connStr))
            {
                //清空旧数据防止插入失败
                cn.Execute("DELETE FROM Player");
                //参数 MSSQL 和 SQLite 使用 @paramName ,Oracle 使用 :paramName
                var insertScript = "INSERT INTO Player VALUES (@Id, @Name, @RegDate, @Score, @BinData)";
                cn.Execute(insertScript, TestData);
                //测试主键 Primary Key
                try
                {
                    //插入错误的信息
                    cn.Execute(insertScript, TestData[0]);
                    throw new ApplicationException("失败:未阻止主键重复");
                }
                catch (Exception ex)
                {
                    Console.WriteLine($"测试成功:{ex.Message}");
                }
            }
        }
        #endregion

        #region 测试获取数据
        static void TestSelect()
        {
            using (var cn = new SQLiteConnection(connStr))
            {
                var list = cn.Query("SELECT * FROM Player");
                Console.WriteLine(JsonConvert.SerializeObject(list, Newtonsoft.Json.Formatting.Indented));
            }
        } 
        #endregion
    }
}

你可能感兴趣的:(程序员,编程,c++,互联网,C语言,c#)