[转载]c# 对SQLite操作类借鉴并修改 - Light Xun - 博客园

[转载]c# 对SQLite操作类借鉴并修改 – Light Xun – 博客园.

/// <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  存储过程
 
     
}
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏