`
lightxun
  • 浏览: 10137 次
  • 性别: Icon_minigender_1
  • 来自: 丹东
社区版块
存档分类
最新评论

c# 对SQLite操作类借鉴并修改

阅读更多
    /// <summary>
    /// SQLite 操作类
    /// Author Light
    /// </summary>
    public class SQLite
    {
        /// <summary>
        /// 数据库
        /// </summary>
        public static string dataBasePath;

        public static string dataBasePasssord;

        /// <summary>
        /// 获取连接
        /// </summary>
        /// <returns></returns>
        private static SQLiteConnection getSQLiteConnection() 
        {
            SQLiteConnection conn = null;          
            try
            {
                conn = new SQLiteConnection();
                SQLiteConnectionStringBuilder connStr = new SQLiteConnectionStringBuilder();
                connStr.DataSource = dataBasePath;
                connStr.Password = dataBasePasssord;                        //设置密码,SQLite ADO.NET实现了数据库密码保护
                conn.ConnectionString = connStr.ToString();
            }
            catch (ExceptionUtility ex) 
            {
                throw new ExceptionUtility("连接数据库异常:" + ex.Message);
            }                     
            return conn;
        }

        #region 执行查询

        /// <summary>
        /// 执行SQL,返回影响的记录数
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static int ExecuteSql(string sql)
        {
            int iResult = -1;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteCommand cmd = new SQLiteCommand(sql, conn))
                {
                    try
                    {
                        conn.Open();
                        iResult = cmd.ExecuteNonQuery();
                    }
                    catch (ExceptionUtility ex)
                    {
                        throw new ExceptionUtility("执行SQL,返回影响的记录数异常:" + ex.Message);
                    }
                }
            }
            return iResult;
        }

        /// <summary>
        /// 执行带一个存储过程参数的SQL语句
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="content"></param>
        /// <returns></returns>
        public static int ExecuteSql(string sql, string content)
        {
            int iResult = -1;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteCommand cmd = new SQLiteCommand(sql, conn))
                {
                    try
                    {
                        SqlParameter parameter = new SqlParameter("@content", SqlDbType.NText);
                        parameter.Value = content;
                        cmd.Parameters.Add(parameter);
                        conn.Open();
                        iResult = cmd.ExecuteNonQuery();
                    }
                    catch (ExceptionUtility ex)
                    {
                        throw new ExceptionUtility("执行带一个存储过程参数的SQL语句异常:" + ex.Message);
                    }
                }
            }
            return iResult;
        }

        /// <summary>
        /// 执行SQL语句,返回影响的记录数
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="sqlParams"></param>
        /// <returns></returns>
        public static int ExecuteSql(string sql, params SqlParameter[] sqlParams)
        {
            int iResult = -1;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteCommand cmd = new SQLiteCommand())
                {
                    try
                    {
                        PrepareCommand(conn, cmd, null, sql, sqlParams);
                        iResult = cmd.ExecuteNonQuery();
                        cmd.Parameters.Clear();
                    }
                    catch (ExceptionUtility ex)
                    {
                        throw new ExceptionUtility("执行SQL语句,返回影响的记录数异常:" + ex.Message);
                    }
                }
            }
            return iResult;
        }

        /// <summary>
        /// 执行查询
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static DataSet Query(string sql)
        {
            DataSet dsResult = null;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteDataAdapter da = new SQLiteDataAdapter(sql, conn))
                {
                    try
                    {
                        conn.Open();
                        dsResult = new DataSet();
                        da.Fill(dsResult, "ds");
                    }
                    catch (ExceptionUtility ex)
                    {
                        throw new ExceptionUtility("执行查询异常:" + ex.Message);
                    }
                }
            }
            return dsResult;
        }

        /// <summary>
        /// 执行查询语句,返回DataSet
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="sqlParams"></param>
        /// <returns></returns>
        public static DataSet Query(string sql, params SqlParameter[] sqlParams)
        {
            DataSet dsResult = null;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteCommand cmd = new SQLiteCommand())
                {
                    using (SQLiteDataAdapter da = new SQLiteDataAdapter(cmd))
                    {
                        try
                        {
                            PrepareCommand(conn, cmd, null, sql, sqlParams);
                            dsResult = new DataSet();
                            da.Fill(dsResult, "ds");
                            cmd.Parameters.Clear();
                        }
                        catch (ExceptionUtility ex)
                        {
                            throw new ExceptionUtility("执行查询返回DataSet异常:" + ex.Message);
                        }
                    }
                }
            }
            return dsResult;
        }

        /// <summary>
        /// 执行一条计算查询结果语句,返回查询结果(object)
        /// 第一行第一列
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static object GetSingle(string sql)
        {
            object oResult = null;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteCommand cmd = new SQLiteCommand(sql, conn))
                {
                    try
                    {
                        conn.Open();
                        oResult = cmd.ExecuteScalar();
                    }
                    catch (ExceptionUtility ex)
                    {
                        throw new ExceptionUtility("执行一条计算查询结果语句,返回查询结果(object)异常:" + ex.Message);
                    }
                }
            }
            return oResult;
        }

        /// <summary>
        /// 执行一条计算查询结果语句,返回查询结果(object)
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="sqlParams"></param>
        /// <returns></returns>
        public static object GetSingle(string sql, params SqlParameter[] sqlParams)
        {
            object oResult = null;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteCommand cmd = new SQLiteCommand())
                {
                    try
                    {
                        PrepareCommand(conn, cmd, null, sql, sqlParams);
                        oResult = cmd.ExecuteScalar();
                        cmd.Parameters.Clear();
                    }
                    catch (ExceptionUtility ex)
                    {
                        throw new ExceptionUtility("执行查询异常:" + ex.Message);
                    }
                }
            }
            return oResult;
        }

        /// <summary>
        /// 执行查询,返回sqliteDataReader
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static SQLiteDataReader ExecuteReader(string sql)
        {
            SQLiteDataReader rResult = null;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteCommand cmd = new SQLiteCommand(sql, conn))
                {
                    try
                    {
                        conn.Open();
                        rResult = cmd.ExecuteReader();
                    }
                    catch (ExceptionUtility ex)
                    {
                        throw new ExceptionUtility("执行查询返回sqliteDataReader异常:" + ex.Message);
                    }
                }
            }
            return rResult;
        }

        /// <summary>
        /// 执行查询语句,返回SqliteDataReader
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="sqlParams"></param>
        /// <returns></returns>
        public static SQLiteDataReader ExecuteReader(string sql, params SqlParameter[] sqlParams)
        {
            SQLiteDataReader rResult = null;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteCommand cmd = new SQLiteCommand())
                {
                    try
                    {
                        PrepareCommand(conn, cmd, null, sql, sqlParams);
                        rResult = cmd.ExecuteReader();
                        cmd.Parameters.Clear();
                    }
                    catch (ExceptionUtility ex)
                    {
                        throw new ExceptionUtility("执行查询返回SqliteDataReader异常:" + ex.Message);
                    }
                }
            }
            return rResult;
        }

        #endregion  执行查询

        #region  执行事务

        /// <summary>
        /// 执行SQL事务操作
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static int ExecuteSqlTran(string sql)
        {
            int iResult = -1;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteTransaction tran = conn.BeginTransaction())
                {
                    using (SQLiteCommand cmd = new SQLiteCommand(sql, conn, tran))
                    {
                        try
                        {
                            if (!string.IsNullOrEmpty(sql))
                            {
                                conn.Open();
                                iResult = cmd.ExecuteNonQuery();
                                tran.Commit();
                            }
                        }
                        catch (ExceptionUtility ex)
                        {
                            tran.Rollback();
                            throw new ExceptionUtility("执行SQL事务操作异常:" + ex.Message);
                        }
                    }
                }
            }
            return iResult;
        }

        /// <summary>
        /// 执行多条SQL事务操作
        /// </summary>
        /// <param name="sql"></param>
        /// <returns></returns>
        public static int ExecuteSqlTran(List<string> sqlList)
        {
            int iResult = -1;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteTransaction tran = conn.BeginTransaction())
                {
                    using (SQLiteCommand cmd = new SQLiteCommand())
                    {
                        try
                        {
                            conn.Open();
                            cmd.Connection = conn;
                            cmd.Transaction = tran;
                            foreach (string sql in sqlList)
                            {
                                if (!string.IsNullOrEmpty(sql))
                                {
                                    cmd.CommandText = sql;
                                    iResult += cmd.ExecuteNonQuery();
                                }
                            }
                            tran.Commit();
                        }
                        catch (ExceptionUtility ex)
                        {
                            tran.Rollback();
                            throw new ExceptionUtility("执行多条SQL事务操作异常:" + ex.Message);
                        }
                    }
                }
            }
            return iResult;
        }

        /// <summary>
        /// 执行多条SQL语句,实现数据库事务
        /// </summary>
        /// <param name="sqlHashTable"></param>
        /// <returns></returns>
        public static int ExecuteSqlTran(Hashtable sqlHashTable)
        {
            int iResult = -1;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteTransaction tran = conn.BeginTransaction())
                {
                    using (SQLiteCommand cmd = new SQLiteCommand())
                    {
                        try
                        {
                            conn.Open();
                            foreach (DictionaryEntry de in sqlHashTable)
                            {
                                string cmdSql = de.Key.ToString();
                                SqlParameter[] cmdParams = (SqlParameter[])de.Value;
                                PrepareCommand(conn, cmd, tran, cmdSql, cmdParams);
                                iResult = cmd.ExecuteNonQuery();
                                cmd.Parameters.Clear();
                                tran.Commit();
                            }
                        }
                        catch (ExceptionUtility ex)
                        {
                            tran.Rollback();
                            throw new ExceptionUtility("执行多条SQL事务异常:" + ex.Message);
                        }
                    }
                }
            }
            return iResult;
        }



        /// <summary>
        /// 向数据库中插入图像格式字段
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="fs"></param>
        /// <returns></returns>
        public static int ExecuteSqlInsertImg(string sql, byte[] fs)
        {
            int iResult = -1;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteCommand cmd = new SQLiteCommand(sql, conn))
                {
                    try
                    {
                        SqlParameter sqlParam = new SqlParameter("@fs", SqlDbType.Image);
                        sqlParam.Value = fs;
                        cmd.Parameters.Add(sqlParam);
                        conn.Open();
                        iResult = cmd.ExecuteNonQuery();
                    }
                    catch (ExceptionUtility ex)
                    {
                        throw new ExceptionUtility("插入图像字段异常:" + ex.Message);
                    }
                }
            }
            return iResult;
        }

        #endregion 执行事务

        #region 私有公共方法

        private static void PrepareCommand(SQLiteConnection conn, SQLiteCommand cmd, SQLiteTransaction tran, string sql, SqlParameter[] sqlParams)
        {
            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            cmd.Connection = conn;
            cmd.CommandText = sql;

            if (tran != null)
            {
                cmd.Transaction = tran;
            }
            cmd.CommandType = CommandType.Text;

            if (sqlParams != null)
            {
                foreach (SqlParameter param in sqlParams)
                {
                    cmd.Parameters.Add(param);
                }
            }
        }

        #endregion 私有公共方法

        #region 存储过程

        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="storedProcName"></param>
        /// <param name="dataParams"></param>
        /// <returns></returns>
        public static SQLiteDataReader RunProcedure(string storedProcName, IDataParameter[] dataParams)
        {
            SQLiteDataReader rResult = null;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteCommand cmd = BuildQueryCommand(conn, storedProcName, dataParams))
                {
                    try
                    {
                        rResult = cmd.ExecuteReader();
                    }
                    catch (ExceptionUtility ex)
                    {
                        throw new ExceptionUtility("执行存储过程异常:" + ex.Message);
                    }
                }
            }
            return rResult;
        }

        /// <summary>
        /// 执行存储过程
        /// </summary>
        /// <param name="storedProcName"></param>
        /// <param name="dataParams"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        public static DataSet RunProcedure(string storedProcName, IDataParameter[] dataParams, string tableName)
        {
            DataSet dsResult = null;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                using (SQLiteDataAdapter da = new SQLiteDataAdapter())
                {
                    try
                    {
                        dsResult = new DataSet();
                        da.SelectCommand = BuildQueryCommand(conn, storedProcName, dataParams);
                        da.Fill(dsResult, tableName);
                    }
                    catch (ExceptionUtility ex)
                    {
                        throw new ExceptionUtility("执行存储过程异常:" + ex.Message);
                    }
                }
            }
            return dsResult;
        }

        /// <summary>
        /// 执行存储过程,返回影响的行数
        /// </summary>
        /// <param name="storedProcName"></param>
        /// <param name="dataParams"></param>
        /// <param name="rowsAffected"></param>
        /// <returns></returns>
        public static int RunProcedure(string storedProcName, IDataParameter[] dataParams, out int rowsAffected)
        {
            int iResult = -1;
            using (SQLiteConnection conn = getSQLiteConnection())
            {
                try
                {
                    SQLiteCommand cmd = BuildIntCommand(conn, storedProcName, dataParams);
                    rowsAffected = cmd.ExecuteNonQuery();
                    iResult = (int)cmd.Parameters["ReturnValue"].Value;
                }
                catch (ExceptionUtility ex) 
                {
                    throw new ExceptionUtility("执行存储过程异常:" + ex.Message);
                }                
            }
            return iResult;
        }


        /// <summary>
        /// 创建SQLiteCommand对象实例(用来返回一个整数值)
        /// </summary>
        /// <param name="conn"></param>
        /// <param name="storedProcName"></param>
        /// <param name="dataParams"></param>
        /// <returns></returns>
        private static SQLiteCommand BuildIntCommand(SQLiteConnection conn, string storedProcName, IDataParameter[] dataParams)
        {
            SQLiteCommand cmd = BuildQueryCommand(conn, storedProcName, dataParams);
            cmd.Parameters.Add(new SqlParameter("ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue, false, 0, 0, string.Empty, DataRowVersion.Default, null));
            return cmd;
        }

        /// <summary>
        /// 构建SqliteCommand对象(用来返回一个结果集,而不是一个整数值)
        /// </summary>
        /// <param name="conn"></param>
        /// <param name="storedProcName"></param>
        /// <param name="dataParams"></param>
        /// <returns></returns>
        private static SQLiteCommand BuildQueryCommand(SQLiteConnection conn, string storedProcName, IDataParameter[] dataParams)
        {
            SQLiteCommand cmd = new SQLiteCommand(storedProcName, conn);
            try
            {
                if (conn.State != ConnectionState.Open)
                {
                    conn.Open();
                }
                cmd.CommandType = CommandType.StoredProcedure;
                foreach (SqlParameter param in dataParams)
                {
                    cmd.Parameters.Add(param);
                }
            }
            catch (ExceptionUtility ex)
            {
                throw new ExceptionUtility("构建SQLiteCommand异常:" + ex.Message);
            }
            return cmd;
        }

        #endregion  存储过程

        
    }
分享到:
评论

相关推荐

    Winform+SQLite 图书管理系统(cs)+源码

    今天的分享是一款之前收集的 C# Winform+SQLite 图书管理系统,数据库使用SQLite,代码清晰、注释完善、简单易读,界面美观大气,非常适合初学者学习或有相应软件需求的二次开发借鉴、源码收藏。 该图书管理系统使用...

    用c#做的飞机售票系统(小型的)

    【标题】:“用C#做的飞机售票系统(小型的)” 这个项目是一个基于C#编程语言开发的小型飞机售票...在学习过程中,应逐步拆解项目,理解每个模块的功能,然后尝试修改和优化,以加深对C#语言特性和软件工程方法的理解。

    C#通讯录源代码

    通过学习和分析这个C#通讯录源代码,初学者可以提升对C#编程的理解,熟悉Windows应用程序开发流程,而有经验的开发者则可以借鉴其中的设计思想和技术实现,用于自己的项目开发。同时,这也是一个很好的实践案例,...

    C#使用程序代码100个

    15. **反射**:C#的反射机制可以动态地获取类的信息并操作,包括类型、属性、方法等。 通过分析和学习这100个C#实例程序,开发者可以加深对C#语言特性和.NET框架的理解,提高编程技巧,同时也能借鉴其中的优秀实践...

    C#日历应用程序,包含日历,记事,傻瓜游戏

    在日历功能方面,C#提供了丰富的类库支持,如System.Windows.Forms.Calendar控件,开发者可以方便地创建出用户友好的界面,展示月份和日期,并允许用户进行日期选择、事件添加等操作。此外,通过利用C#的事件处理...

    C# 简单相册

    【C# 简单相册】是一款基于C#编程语言开发的相册应用程序,它借鉴了Adobe公司的设计理念,旨在为用户提供一个易于操作、功能实用的个人或家庭照片管理工具。这款相册系统具备基本的照片浏览、组织、编辑以及分享功能...

    C#类似QQ的全套聊天系统

    【C#类似QQ的全套聊天系统】是一种基于C#编程语言开发的即时通讯软件,它借鉴了QQ的设计理念,提供了类似的功能,如好友管理、实时消息传输、群组聊天、文件分享等。在这个项目中,我们将深入探讨如何利用C#构建这样...

    C#仿QQ2008界面及聊天系统SQL数据库版

    《C#仿QQ2008界面及聊天系统SQL数据库版》是一款基于C#编程语言开发的聊天系统,它借鉴了QQ2008的经典界面设计,并采用了SQL数据库来存储和管理用户信息以及聊天记录。这个项目对于学习C#语言、GUI设计、网络通信...

    一个日记本程序(C#.net)(以前下载的,好的东西大家分享)

    描述中提到“以前下载的,感觉还不错,里面有很多东西值得借鉴”,这暗示了这个日记本程序可能包含了一些实用的功能和良好的设计实践,适合C#初学者或开发者学习参考。在C#中,可以利用丰富的类库如System.IO来处理...

    c# Vista风格日历的备忘程序

    【C# Vista风格日历备忘程序】是一个利用C#编程语言开发的桌面应用程序,它借鉴了Windows Vista操作系统的界面风格,为用户提供了一个美观且实用的日历工具。这个程序不仅具备基本的日历查看功能,还集成了备忘录...

    C#做的一个电话本实例

    【C#制作电话本实例详解】 C#是一种广泛应用于Windows...通过这个C#电话本实例,初学者可以深入理解C#编程、Windows Forms应用开发以及数据库操作,而经验丰富的开发者则可以借鉴其架构和设计,进一步提升自己的技能。

    C# 写的一款朋友定制的标签打印排序软件

    例如,System.IO命名空间下的类可用于文件操作,Microsoft.Office.Interop.Excel库则提供了与Excel交互的接口。开发者通过熟练运用这些工具,实现了数据的导入导出以及界面的动态响应。 最后,值得注意的是,软件...

    C#类似QQ的全套聊天系统.rar

    1. **C#基础**:包括类、对象、接口、继承、多态等面向对象概念,以及事件处理、线程管理和异步操作等高级特性。 2. **网络编程**:利用C#的System.Net命名空间,如Socket类,实现客户端与服务器之间的数据传输。 3....

    c# winform学生信息管理系统

    1. 数据模型设计:根据学生信息管理需求,定义实体类,如Student、Grade、Attendance等,并建立它们之间的关联关系。 2. 数据访问层:使用ADO.NET或Entity Framework等技术与数据库进行交互,实现CRUD操作。 3. ...

    基于C#的客房管理系统

    C#通过ADO.NET库与数据库进行交互,执行CRUD(创建、读取、更新、删除)操作。 3. **ASP.NET**:考虑到文件名包含"51aspx",这可能意味着系统是基于ASP.NET开发的,一个用于构建Web应用程序的.NET框架。ASP.NET提供...

    房屋管理信息资源认证(关于C#的)

    本资源包"房屋管理信息资源认证"是针对C#初学者设计的一套练习题,旨在帮助学习者熟悉C#语言,并通过实际操作提升对房屋管理信息系统的理解。 首先,我们来了解一下C#的基础知识。C#是由微软公司推出的面向对象的...

    飞翔工作室多用户留言薄 Ver2.0(C#最新版)

    2. 数据存储:项目可能采用了ADO.NET或Entity Framework等数据访问技术,实现对数据库的操作,如SQL Server或SQLite,以存储和检索用户信息和留言记录。 3. 多用户交互:利用C#的事件驱动模型,实现多用户之间的...

    C#制作图书馆管理系统 文档 代码 都有 是个很成功的毕业论文

    在C#环境下,我们可以利用.NET Framework提供的丰富的类库和控件来快速搭建用户界面,并通过ADO.NET进行数据库操作,如SQL Server或SQLite等。 1. **图书管理**:这一模块涉及到图书的增删改查,包括录入新书信息、...

    仿QQ2008聊天程序(c#源码).7z

    7. **数据库操作**:如果程序包含好友列表、历史记录等功能,可能需要与数据库交互,如SQLite或SQL Server。 8. **加密解密**:为了保护用户的隐私,聊天内容可能需要进行加密传输。 9. **错误处理与日志记录**:...

    Oicq.rar_c#写qq

    【标签】"c#写qq" 是对项目技术实现和目标的简单概括,表明是用C#语言来编写一个类似于QQ的聊天应用。 【压缩包子文件的文件名称列表】中: - **www.pudn.com.txt** 可能是开发者在开发过程中记录的一些资料链接...

Global site tag (gtag.js) - Google Analytics