Dapper 是一款非常不错的轻型 ORM 框架,使用起来非常方便,经常使用 EF 框架的人几乎感觉不到差别,下面是自己写的 Sqlite 通用帮助类;

数据连接类;

public class SQLiteBaseRepository
{
public static string DbFile
{
get {
return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "VideoInfo.db");
}
}
public static SQLiteConnection SimpleDbConnection()
{ string connString = string.Format("Data Source={0};Password=******;", DbFile);
return new SQLiteConnection(connString);
}
}

数据库访问帮助类

 public class SQLiteDbHelper : IDisposable
{
/// <summary>
/// 常量;
/// </summary>
const string INSERT_TABLE_ITEM_VALUE = "insert into {0} ({1}) values ({2})";
const string DELETE_TABLE_WHERE = "delete from {0} where {1}";
const string UPDATE_TABLE_EDITITEM = "update {0} set {1}";
const string UPDATE_TABLE_EDITITEM_WHERE = "update {0} set {1} where {2}";
const string Query_ITEM_TABLE_WHERE = "select {0} from {1} where {2}"; private SQLiteConnection conn; public SQLiteDbHelper()
{
conn = openDataConnection();
}
/// <summary>
/// 打开数据库链接;
/// </summary>
/// <returns></returns>
private SQLiteConnection openDataConnection()
{
var conn = SqLiteBaseRepository.SimpleDbConnection();
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
return conn;
}
/// <summary>
/// 1.1 新增实体;
/// </summary>
/// <typeparam name="T">实体类</typeparam>
/// <param name="model">实体</param>
/// <param name="autoPrimaryKey">自增主键名称</param>
/// <returns></returns>
public int Add<T>(T model, string autoPrimaryKey = "id")
{
var insertSql = GetInsertSql<T>(model,autoPrimaryKey);
return conn.Execute(insertSql);
}
/// <summary>
/// 批量新增
/// </summary>
/// <typeparam name="T">实休类</typeparam>
/// <param name="addData">实体数据列表</param>
/// <param name="autoPrimaryKey">自增主键名称</param>
/// <returns></returns>
public int Adds<T>(List<T> models, string autoPrimaryKey = "id")
{
var type = typeof(T);
int resultN = ;
var transaction = conn.BeginTransaction();
try
{
models.ForEach(d =>
{
var insertSql = GetInsertSql<T>(d);
resultN += conn.Execute(insertSql);
});
transaction.Commit();
}
catch (Exception)
{
resultN = ;
transaction.Rollback();
}
return resultN;
}
/// <summary>
/// 删除
/// </summary>
/// <typeparam name="T">实体类</typeparam>
/// <param name="where">删除条件</param>
/// <returns></returns>
public int Delete<T>(string where)
{
var type = typeof(T);
string sqlStr = string.Format(DELETE_TABLE_WHERE, type.Name, where);
return conn.Execute(sqlStr);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="tableName"></param>
/// <param name="where"></param>
/// <returns></returns>
public int Delete(string tableName, string where)
{
string sqlStr = string.Format(DELETE_TABLE_WHERE,tableName,where);
return conn.Execute(sqlStr);
}
/// <summary>
/// 修改;
/// </summary>
/// <typeparam name="T">实体 Type </typeparam>
/// <param name="model">实体</param>
/// <param name="where">修改条件</param>
/// <param name="attrs">要修改的实休属性数组</param>
/// <returns></returns>
public int Edit<T>(T model, string where, params string[] attrs)
{
var sqlStr = GetUpdateSql<T>(model, where, attrs);
return conn.Execute(sqlStr);
} /// <summary>
/// 根据条件查询单一实体;
/// </summary>
/// <typeparam name="T">实体类</typeparam>
/// <param name="where">查询条件;</param>
/// <param name="attrs">要查询的字段(传入 * 为查询所有字段。)</param>
/// <returns></returns>
public T QeryByWhere<T>(string where,params string[] attrs)
{
Type type = typeof(T);
string item = attrs.Length == && attrs[] == "*" ? "*" : string.Join(",", attrs);
var sqlStr = string.Format(Query_ITEM_TABLE_WHERE, item, type.Name, where);
return conn.Query<T>(sqlStr).FirstOrDefault();
} /// <summary>
/// 根据条件查询符合条件的所有实体;
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="where"></param>
/// <returns></returns>
public List<T> QueryMultiByWhere<T>(string where)
{
Type type = typeof(T);
var sqlStr = string.Format(Query_ITEM_TABLE_WHERE, "*", type.Name, where);
return conn.Query<T>(sqlStr).ToList();
} /// <summary>
/// 生成新增 sql 语句;
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="model"></param>
/// <param name="autoPrimaryKey"></param>
/// <returns></returns>
private string GetInsertSql<T>(T model, string autoPrimaryKey = "id")
{
Type t = typeof(T);
var propertyInfo = t.GetProperties();
var proDic = propertyInfo.Where(s => !s.Name.Equals(autoPrimaryKey, StringComparison.InvariantCultureIgnoreCase))
.Select(s => new
{
key = s.Name,
value = GetValue<T>(s, model)
})
.ToDictionary(s => s.key, s => s.value);
proDic = proDic.Where(s => s.Value != "''").ToDictionary(s => s.Key, s => s.Value);
var items = string.Join(",", proDic.Keys);
var values = string.Join(",", proDic.Values);
return string.Format(INSERT_TABLE_ITEM_VALUE,t.Name,items,values);
} /// <summary>
/// 获取属性值;
/// </summary>
/// <typeparam name="T">实体类</typeparam>
/// <param name="info">字段属性信息</param>
/// <param name="model">实体</param>
/// <returns></returns>
private string GetValue<T>(PropertyInfo info,T model)
{
Type type = info.PropertyType;
var tempStr = string.Empty;
if (type == typeof(string))
{
tempStr = string.Format("'{0}'",info.GetValue(model));
return tempStr;
}
if (type == typeof(DateTime))
{
tempStr = string.Format("'{0}'", ((DateTime)info.GetValue(model)).ToString("s"));
return tempStr;
}
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
{
var types = type.GetGenericArguments();
if (types[] == typeof(DateTime))
{
tempStr = string.Format("'{0}'", ((DateTime)info.GetValue(model)).ToString("s"));
}
tempStr = string.Format("'{0}'",info.GetValue(model));
return tempStr;
}
tempStr = info.GetValue(model).ToString();
return tempStr;
} /// <summary>
/// 生成更新 sql 语句;
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="model"></param>
/// <param name="pro"></param>
/// <param name="attrs"></param>
/// <returns></returns>
private string GetUpdateSql<T>(T model,string where, params string[] attrs)
{
Type t = typeof(T);
var propertyInfo = t.GetProperties();
var updateInfo = propertyInfo
.Where(s => attrs.Contains(s.Name))
.Select(s =>
{
if (s.PropertyType == typeof(string))
{
return string.Format("{0}='{1}'",s.Name,s.GetValue(model));
}
if (s.PropertyType == typeof(DateTime))
{
return string.Format("{0}='{1}'",s.Name,((DateTime)s.GetValue(model)).ToString("s"));
}
if (s.PropertyType.IsGenericType && s.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
Type[] types = s.PropertyType.GetGenericArguments();
if (types[] == typeof(DateTime))
{
return string.Format("{0}='{1}'", s.Name, ((DateTime)s.GetValue(model)).ToString("s"));
}
return string.Format("{0}={1}", s.Name, s.GetValue(model));
}
return string.Format("{0}={1}", s.Name, s.GetValue(model));
})
.ToArray();
var setStr = string.Join(",",updateInfo);
var sqlStr = string.Format(UPDATE_TABLE_EDITITEM_WHERE, t.Name, setStr, where);
return sqlStr;
}
/// <summary>
/// 释放数据连接;
/// </summary>
public void Dispose()
{
conn.Close();
conn.Dispose();
} }

https://www.cnblogs.com/llsfast/p/7883357.html

C# 使用 Dapper 实现 SQLite 增删改查的更多相关文章

  1. android 入门 006(sqlite增删改查)

    android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite; import android.content.Context; import ...

  2. iOS sqlite 增删改查 简单封装(基于 FMDB)

    /** *  对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 * *  基于 FMDB * *  操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整 ...

  3. C#Sqlite增删改查

    说到使用数据库的话,无非也就是对数据的增加,删除和修改以及查询.前文已经 创建好了程序,现在我们就可以来具体实现Sqlite的数据操作,增删改查. 第一步,创建连接字符串来连接数据库: private ...

  4. iOS SQLite 增删改查的封装(关系型)

    在工程里导入libsqlite3.tbd库(Xcode 7) #import <UIKit/UIKit.h> @interface AppDelegate : UIResponder &l ...

  5. C# Dapper 基本使用 增删改查事务等

    using DapperTest.Models; using System.Collections.Generic; using System.Web.Http; using Dapper; usin ...

  6. C# Dapper 基本使用 增删改查事务

    来源:https://blog.csdn.net/Tomato2313/article/details/78880969 using DapperTest.Models; using System.C ...

  7. sqlite 增删改查

    PersonDao1.java package mm.shandong.com.testsqlsqllite.dao; import android.content.Context; import a ...

  8. 回家前的挣扎——SQLite增删改查

    引言 最后一天,公司就两个人,也不知道弄点什么,就在网上找了Sqlite的文档,看了看,这里也是现学现卖,给自己找点事做,感觉时间过得还是比较快的,不然焦急等待,滋味不好受啊. SQLite简介 SQ ...

  9. iOS SQLite增删改查(简单应用)

    // 注意: 在工程里导入libsqlite3.tbd库(Xcode7,如果Xcode7以下的版本则导入libsqlite3.dylib). #import <UIKit/UIKit.h> ...

随机推荐

  1. 小程序~获取手机号getPhoneNumber提示该appid没有权限

    处理思路 (1)小程序是不是企业主体 (2)有没有进行认证 (3)如果没有 是不可以获取用户手机号码的 .

  2. Murach ASP.NET 4.5 C# With Visual Studio 2013 翻译

    本书由我自己翻译完,省略书中练习部分,练习部分可以阅读原文   本书对新手友好,介绍了Web通讯的基本原理,ASP.NET开发,项目开发所需的各种开发与部署技术, Ajax,与WCF, Web API ...

  3. 《Exceptioning团队》第四次作业:项目需求调研与分析

    一.项目基本介绍 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 团队名称 Exception 作业学习目标 1.探索团队软件项目需求获取技巧与方法2.学会 ...

  4. 抖音热门BGM爬虫下载

    下午无聊在某网上刷了会儿抖音,发现有些音乐还是挺好听的,可以用来做手机铃声,于是想办法从某网上把歌曲爬下来 附上代码: #!/usr/bin/env python # -*- coding: utf- ...

  5. 使用VISIO绘制组织结构图的操作方法

    1.确保电脑已安装VISIO软件,然后在电脑指定位置点击鼠标右键新建VISIO绘图文档. 2.打开文档,在弹出的选择绘图类型中点击商务.组织结构图,之后点击确定. 3.之后进入绘图主界面,在左侧是形状 ...

  6. vscode远程调试node服务端

    { "type": "node", "request": "attach", "name": &qu ...

  7. LightOJ - 1294 - Positive Negative Sign(规律)

    链接: https://vjudge.net/problem/LightOJ-1294 题意: Given two integers: n and m and n is divisible by 2m ...

  8. Continuous Subarray Sum II

    Description Given an circular integer array (the next element of the last element is the first eleme ...

  9. Python学习之--用户输入以及运算

    一. 用户输入:input 1. 函数input() 让程序暂停运行,等待用户输入一些文本. 2.使用int()将字符串转为数值 二.运算:+-*. 1.求模运算符 (%)将两个数相除并返回余数: 2 ...

  10. 在Mac如何启动MySQL

    安装好MySQL服务后(安装步骤可以参考系列经验1).打开“系统偏好设置”,单击下端的“MySQL”图标. 2 在“MySQL”对话框中,单击“启动MySQL服务”按钮. 3 在弹出的窗口中,输入管理 ...