Loading... ## 系列导航 <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="/index.php/archives/20/" target="_blank" class="post_inser_a no-external-link"> <div class="inner-image bg" style="background-image: url(?usr/themes/handsome/assets/img/sj/1.jpg);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">【手摸手系列】教你开发QQ机器人 - 目录导航</p> <div class="inster-summary text-muted"> 教程背景由于发生了众所周知的机器人平台事件,本教程没有继续更新的必要了,故已停止更新平台和SDK的有点我就不介绍了... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> 本文系列源码:[点我进入][1] ### 本期目标 结合实际场景 - 使用sqlite-net ### 1.整合Sqlite-net <div class="tip inlineBlock info"> 由于SDK中Native.Tool中提供的sqlite工具类,太!难!用!了! 此处将自带Sqlite工具类删除了,通过nuget引用Sqlite-Net [使用文档点我进入][2] 他人翻译和整合的[中文版文档][3] </div> 首先新建类库**Site.会写程序的男人博客.Demo.DB**存放数据库模型类和SQlite工具类 在Demo.Code中添加对**Site.会写程序的男人博客.Demo.DB**的引用! 工具-Nuget包管理器-管理解决方案的Nuget程序包 搜索**sqlite-net** 我们直接集成到Demo.DB中 确定后,会自动添加SQLite.cs【同步类】和SQLiteAsync.cs【异步类】文件,不管它! 删掉建库自带的Class1.cs或者将其改名为SQLiteHelper.cs <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-7df91b000db5e5dd33116de6ec9f9fcd83" aria-expanded="true"><div class="accordion-toggle"><span>SQLiteHelper.cs 点我展开</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div id="collapse-7df91b000db5e5dd33116de6ec9f9fcd83" class="panel-body collapse"> ```c# using SQLite; using System.Collections.Generic; namespace Site.会写程序的男人博客.Demo.DB { public class SQLiteHelper { public SQLiteConnection db; public SQLiteHelper(string connstr) { db = new SQLiteConnection(connstr); //这里等会要加东西 } public int Add<T>(T model) { return db.Insert(model); } public int Update<T>(T model) { return db.Update(model); } public int Delete<T>(T model) { return db.Delete(model); } public List<T> Query<T>(string sql) where T : new() { return db.Query<T>(sql); } public int Execute(string sql) { return db.Execute(sql); } } } ``` </div></div> 引用Native.SDK类【这一步可选,如果你不需要在Sql过程中调用一些酷Q API的话】 增加一个Common.cs存储一些公共类 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-7e1638decd7960718fc8fa20b9ce58e895" aria-expanded="true"><div class="accordion-toggle"><span>Common.cs 点我展开</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div id="collapse-7e1638decd7960718fc8fa20b9ce58e895" class="panel-body collapse"> ```c# using Native.Sdk.Cqp; namespace Site.会写程序的男人博客.Demo.DB { public static class Common { public static CQApi CqApi { get; set; }//可选,如果你不需要在Sql过程中调用一些酷Q API的话 public static CQLog CqLog { get; set; }//可选,如果你不需要在Sql过程中调用一些酷Q API的话 public static string DbPath { get; set; } public static SQLiteHelper sqliteHelper { get; set; } } } ``` </div></div> ### 2.使用Sqlite-net 首先**Site.会写程序的男人博客.Demo.DB**下新建文件夹**Model**存放我们的数据库模型 用一个简单的示例来演示Sqlite的使用 <div class="tip inlineBlock share"> 应用场景: 一张用户表,记录了对应的用户ID和用户信息(包括 昵称、性别) 可以通过ID查询用户信息。 【其他的使用在Helper中已经集成了基本的增删改了,也可以直接执行sql语句】 </div> 抽象表为一个Class类,我们这边可以用"T_"来标记用于数据库表的抽象模型 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-6727af1712c0b7c73236cc5cf9796703100" aria-expanded="true"><div class="accordion-toggle"><span>T_User.cs 点我展开</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div id="collapse-6727af1712c0b7c73236cc5cf9796703100" class="panel-body collapse"> ```c# using SQLite; namespace Site.会写程序的男人博客.Demo.DB.Model { public class T_User { /// <summary> /// 自增主键,用作用户ID /// </summary> [PrimaryKey, AutoIncrement]//分别表示主键,自增 public int Id { get; set; } /// <summary> /// 昵称 /// </summary> public string Nick { get; set; } = "我是默认昵称"; /// <summary> /// 性别 0未知 1男 2女 /// </summary> public int Gender { get; set; } = 0; } } ``` </div></div> ```c# using SQLite; using System.Collections.Generic; using Site.会写程序的男人博客.Demo.DB.Model; namespace Site.会写程序的男人博客.Demo.DB { public class SQLiteHelper { public SQLiteConnection db; public SQLiteHelper(string connstr) { db = new SQLiteConnection(connstr); db.CreateTable<T_User>();//表已存在不会重复创建,每次新增一个表的抽象类都在这里添加db.CreateTable<T_XXXX>(),才会在程序启动的时候自动创建表。 } //下面的内容相同,省略 } ``` 在"Event_AppEnable.cs"修改如下 <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-c4cef9d7d391f6954dfa2833b4eb249582" aria-expanded="true"><div class="accordion-toggle"><span>新的Event_AppEnable.cs</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div id="collapse-c4cef9d7d391f6954dfa2833b4eb249582" class="panel-body collapse"> ```c# using System.Linq; using System.Text; using Native.Sdk.Cqp.Interface; using Native.Sdk.Cqp.EventArgs; using System.IO; using Native.Tool.IniConfig.Linq; using Site.会写程序的男人博客.Demo.DB; namespace Site.会写程序的男人博客.Demo.Code.Event { public class Event_AppEnable : IAppEnable { public void AppEnable(object sender, CQAppEnableEventArgs e) { Common.CqApi = e.CQApi; DB.Common.CqApi = e.CQApi; DB.Common.CqLog = e.CQLog; DB.Common.DbPath = e.CQApi.AppDirectory + "yourname.db";//".db前面的文字可以修改为你想要的数据库文件名称,建议使用英文" DB.Common.sqliteHelper = new SQLiteHelper(DB.Common.DbPath); string commandPath = Common.CqApi.AppDirectory + "command.ini"; IniObject iObject; //下面的内容相同,省略 } } } ``` </div></div> 最后在任意想使用的地方使用 DB.Common.sqliteHelper.Add(某个T_User)//增加新数据 DB.Common.sqliteHelper.Update(某个T_User)//更新某个数据(根据主键) DB.Common.sqliteHelper.Delete(某个T_User)//删除某个数据(根据主键) [1]: https://github.com/会写程序的男人博客0929/Native.Cqp.Csharp/tree/demo [2]: https://github.com/praeclarum/sqlite-net/wiki/GettingStarted [3]: https://blog.csdn.net/WuLex/article/details/78636047 [4]: https://gitee.com/DotNet会写程序的男人博客/mydatadb/raw/master/img/20200327161822.png <hr class="content-Ideal" style="margin-top:50px" /><blockquote class="content-Ideal" style="font-style:normal"><p class="content-Ideal">版权属于:会写程序的男人博客</p><p class="content-Ideal">本文链接:<a class="content-Ideal" href="/index.php/archives/24/">/index.php/archives/24/</a></p><p class="content-Ideal">若无注明,本站文章皆为原创,转载时须注明出处及本声明</p></blockquote> Last modification:July 23rd, 2020 at 05:52 pm ? 允许规范转载 Support 如果觉得我的文章对你有用,请随意赞赏 ×Close Appreciate the author Sweeping payments Pay by AliPay Pay by WeChat