前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >封装了 System.Data.SQLite 的数据库助手类

封装了 System.Data.SQLite 的数据库助手类

原创
作者头像
用户7108768
修改2021-11-02 14:41:52
7150
修改2021-11-02 14:41:52
举报

System.Data.SQLite数据库通用类  针对对数据库的操作情况,分为以下几种情况: 创建数据库文件; 返回DataTable; 返回DataReader; 执行增删改,返回受影响的行数; 执行查询,返回第一行第一列(通常用于带有行函数的查询,如SUM/AVG/COUNT等); 返回库中所有的表; 因为在System.Data.SQLite中不存在存储过程,所以所有的操作都是基于文本的SQL语句,为了避免SQL注入,所以使用了参数化的SQL语句,这个数据库通用类如下:

代码语言:javascript
复制
using System;
using System.Data;
using System.Data.Common;
using System.Data.SQLite;
namespace SQLiteQueryBrowser
{
    /// <summary>
    /// 说明:这是一个针对System.Data.SQLite的数据库常规操作封装的通用类。
    /// Version:0.1
    /// </summary>
    public class SQLiteDBHelper
    {
        private string connectionString = string.Empty;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="dbPath">SQLite数据库文件路径</param>
        public SQLiteDBHelper(string dbPath)
        {
            this.connectionString = "Data Source=" + dbPath;
        }
        /// <summary>
        /// 创建SQLite数据库文件
        /// </summary>
        /// <param name="dbPath">要创建的SQLite数据库文件路径</param>
        public static void CreateDB(string dbPath)
        {
            using (SQLiteConnection connection = new SQLiteConnection("Data Source=" + dbPath))
            {
                connection.Open();
                using (SQLiteCommand command = new SQLiteCommand(connection))
                {
                    command.CommandText = "CREATE TABLE Demo(id integer NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE)";
                    command.ExecuteNonQuery();

                command.CommandText = "DROP TABLE Demo";
                command.ExecuteNonQuery();
            }
        }
    }
    /// <summary>
    /// 对SQLite数据库执行增删改操作,返回受影响的行数。
    /// </summary>
    /// <param name="sql">要执行的增删改的SQL语句</param>
    /// <param name="parameters">执行增删改语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>
    /// <returns></returns>
    public int ExecuteNonQuery(string sql, SQLiteParameter[] parameters)
    {
        int affectedRows = 0;
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            connection.Open();
            using (DbTransaction transaction = connection.BeginTransaction())
            {
                using (SQLiteCommand command = new SQLiteCommand(connection))
                {
                    command.CommandText = sql;
                    if (parameters != null)
                    {
                        command.Parameters.AddRange(parameters);
                    }
                    affectedRows = command.ExecuteNonQuery();
                }
                transaction.Commit();
            }
        }
        return affectedRows;
    }
    /// <summary>
    /// 执行一个查询语句,返回一个关联的SQLiteDataReader实例
    /// </summary>
    /// <param name="sql">要执行的查询语句</param>
    /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>
    /// <returns></returns>
    public SQLiteDataReader ExecuteReader(string sql, SQLiteParameter[] parameters)
    {
        SQLiteConnection connection = new SQLiteConnection(connectionString);
        SQLiteCommand command = new SQLiteCommand(sql, connection);
        if (parameters != null)
        {
            command.Parameters.AddRange(parameters);
        }
        connection.Open();
        return command.ExecuteReader(CommandBehavior.CloseConnection);
    }
    /// <summary>
    /// 执行一个查询语句,返回一个包含查询结果的DataTable
    /// </summary>
    /// <param name="sql">要执行的查询语句</param>
    /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>
    /// <returns></returns>
    public DataTable ExecuteDataTable(string sql, SQLiteParameter[] parameters)
    {
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            using (SQLiteCommand command = new SQLiteCommand(sql, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
                DataTable data = new DataTable();
                adapter.Fill(data);
                return data;
            }
        }

    }
    /// <summary>
    /// 执行一个查询语句,返回查询结果的第一行第一列
    /// </summary>
    /// <param name="sql">要执行的查询语句</param>
    /// <param name="parameters">执行SQL查询语句所需要的参数,参数必须以它们在SQL语句中的顺序为准</param>
    /// <returns></returns>
    public Object ExecuteScalar(string sql, SQLiteParameter[] parameters)
    {
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            using (SQLiteCommand command = new SQLiteCommand(sql, connection))
            {
                if (parameters != null)
                {
                    command.Parameters.AddRange(parameters);
                }
                SQLiteDataAdapter adapter = new SQLiteDataAdapter(command);
                DataTable data = new DataTable();
                adapter.Fill(data);
                return data;
            }
        }
    }
    /// <summary>
    /// 查询数据库中的所有数据类型信息
    /// </summary>
    /// <returns></returns>
    public DataTable GetSchema()
    {
        using (SQLiteConnection connection = new SQLiteConnection(connectionString))
        {
            connection.Open();
            DataTable data=connection.GetSchema("TABLES");
            connection.Close();
            //foreach (DataColumn column in data.Columns)
            //{
            //    Console.WriteLine(column.ColumnName);
            //}
            return data;
        }
    }

}

}
</pre> 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档