[C#] 简单的 Helper 封装 -- SQLiteHelper

复制代码
  1 using System;
  2 using System.Data;
  3 using System.Data.SQLite;
  4 
  5 namespace SqliteConsoleApp
  6 {
  7     /// <summary>
  8     /// SQLite 助手
  9     /// </summary>
 10     public sealed class SQLiteHelper
 11     {
 12         private const string ConnectionStr = "Data Source=recipes.s3db";
 13         private static SQLiteHelper _instance;
 14         private static readonly object Locker = new object ();
 15 
 16         private SQLiteHelper()
 17         {
 18         }
 19 
 20         /// <summary>
 21         /// 获取实例
 22         /// </summary>
 23         /// <returns></returns>
 24         public static SQLiteHelper GetInstance()
 25         {
 26             if (_instance == null )
 27             {
 28                 lock (Locker)
 29                 {
 30                     if (_instance == null )
 31                     {
 32                         _instance = new SQLiteHelper ();
 33                     }
 34                 }
 35             }
 36 
 37             return _instance;
 38         }
 39 
 40         /// <summary>
 41         /// 获取数据表
 42         /// </summary>
 43         /// <param name="cmdText"> 需要执行的命令文本 </param>
 44         /// <returns> 一个数据表集合 </returns>
 45         public DataTable GetDataTable( string cmdText)
 46         {
 47             var dt = new DataTable();
 48 
 49             try
 50             {
 51                 using (var conn = new SQLiteConnection (ConnectionStr))
 52                 {
 53                     conn.Open();
 54                     var cmd = new SQLiteCommand(conn) {CommandText = cmdText};
 55                     using (var reader = cmd.ExecuteReader())
 56                     {
 57                         dt.Load(reader);
 58                     }
 59                 }
 60             }
 61             catch (Exception e)
 62             {
 63                 throw new Exception(e.Message);
 64             }
 65 
 66             return dt;
 67         }
 68 
 69         /// <summary>
 70         /// 执行非查询命令
 71         /// </summary>
 72         /// <param name="cmdText"> 需要执行的命令文本 </param>
 73         /// <returns> 返回更新的行数 </returns>
 74         public int ExecuteNonQuery( string cmdText)
 75         {
 76             using (var conn = new SQLiteConnection (ConnectionStr))
 77             {
 78                 conn.Open();
 79                 var cmd = new SQLiteCommand(conn) {CommandText = cmdText};
 80                 var rowsUpdated = cmd.ExecuteNonQuery();
 81 
 82                 return rowsUpdated;
 83             }
 84         }
 85 
 86         /// <summary>
 87         /// 执行检索单项命令
 88         /// </summary>
 89         /// <param name="cmdText"> 需要执行的命令文本 </param>
 90         /// <returns> 一个字符串 </returns>
 91         public string ExecuteScalar( string cmdText)
 92         {
 93             using (var conn = new SQLiteConnection (ConnectionStr))
 94             {
 95                 conn.Open();
 96                 var cmd = new SQLiteCommand(conn) {CommandText = cmdText};
 97                 var value = cmd.ExecuteScalar();
 98 
 99                 if (value != null )
100                 {
101                     return value.ToString();
102                 }
103             }
104 
105             return "" ;
106         }
107     }
108 }
复制代码

 

posted @   反骨仔  阅读(7096)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
历史上的今天:
2015-12-04 ECharts 初识(基于MVC+jQuery+Angularjs实现的Demo)
点击右上角即可分享
微信分享提示