热门:网页模板.net视频教程JQueryMVCjsonExtJs源码示例三级联动JQuery菜单
您现在的位置:.Net中文社区>> .Net编程>>正文内容

SQLiteHelper-SQLite帮助类

发布时间:2010年07月06日点击数: 佚名

最近做项目用到了SQLite数据库,就自己写了个SQLite帮助类,类似于SQLHelper。
不过是按照我常用方式写的,主要与SQLHelper不同的是
1、这个帮助类并没有内置ConnectionString,是需要在调用方法的时候指定的,这样的好处的是:在一般的三层架构时都会在Helper里指定一个数据库连接,但是如果我又想用这个帮助类但是我想查询其他数据库的时候就无法使用了。
2、PrepareCommand这个方法我也修改了下,由于增删改查4个方法都用到这个方法来减少重复代码,但是我目前就在插入和更新用到事务操作,查询没有用到,但不知道这样写到底对不对,哪位看了可以帮忙给出个了比较好的解决方法?
3、由于SQLite内置了limit,给我们分页提供了很大的便利,所以我在这个帮助类里面也自己封装了分页方法。
不多说了,附代码:

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Data; 
  6. using System.Data.Common; 
  7. using System.Data.SQLite; 
  8.  
  9. namespace Tools.Data 
  10.     /// <summary> 
  11.     /// 本类为SQLite数据库帮助静态类,使用时只需直接调用即可,无需实例化 
  12.     /// </summary> 
  13.     public static class SQLiteHelper 
  14.     { 
  15.         #region ExecuteNonQuery 
  16.         /// <summary> 
  17.         /// 执行数据库操作(新增、更新或删除) 
  18.         /// </summary> 
  19.         /// <param name="connectionString">连接字符串</param> 
  20.         /// <param name="cmd">SqlCommand对象</param> 
  21.         /// <returns>所受影响的行数</returns> 
  22.         public static int ExecuteNonQuery(string connectionString, SQLiteCommand cmd) 
  23.         { 
  24.             int result = 0; 
  25.             if (connectionString == null || connectionString.Length == 0) 
  26.                 throw new ArgumentNullException("connectionString"); 
  27.             using (SQLiteConnection con = new SQLiteConnection(connectionString)) 
  28.             { 
  29.                 SQLiteTransaction trans = null
  30.                 PrepareCommand(cmd, con, ref trans, true, cmd.CommandType, cmd.CommandText); 
  31.                 try 
  32.                 { 
  33.                     result = cmd.ExecuteNonQuery(); 
  34.                     trans.Commit(); 
  35.                 } 
  36.                 catch (Exception ex) 
  37.                 { 
  38.                     trans.Rollback(); 
  39.                     throw ex; 
  40.                 } 
  41.             } 
  42.             return result; 
  43.         } 
  44.  
  45.         /// <summary> 
  46.         /// 执行数据库操作(新增、更新或删除) 
  47.         /// </summary> 
  48.         /// <param name="connectionString">连接字符串</param> 
  49.         /// <param name="commandText">执行语句或存储过程名</param> 
  50.         /// <param name="commandType">执行类型</param> 
  51.         /// <returns>所受影响的行数</returns> 
  52.         public static int ExecuteNonQuery(string connectionString, string commandText, CommandType commandType) 
  53.         { 
  54.             int result = 0; 
  55.             if (connectionString == null || connectionString.Length == 0) 
  56.                 throw new ArgumentNullException("connectionString"); 
  57.             if (commandText == null || commandText.Length == 0) 
  58.                 throw new ArgumentNullException("commandText"); 
  59.             SQLiteCommand cmd = new SQLiteCommand(); 
  60.             using (SQLiteConnection con = new SQLiteConnection(connectionString)) 
  61.             { 
  62.                 SQLiteTransaction trans = null
  63.                 PrepareCommand(cmd, con, ref trans, true, commandType, commandText); 
  64.                 try 
  65.                 { 
  66.                     result = cmd.ExecuteNonQuery(); 
  67.                     trans.Commit(); 
  68.                 } 
  69.                 catch (Exception ex) 
  70.                 { 
  71.                     trans.Rollback(); 
  72.                     throw ex; 
  73.                 } 
  74.             } 
  75.             return result; 
  76.         } 
  77.  
  78.         /// <summary> 
  79.         /// 执行数据库操作(新增、更新或删除) 
  80.         /// </summary> 
  81.         /// <param name="connectionString">连接字符串</param> 
  82.         /// <param name="commandText">执行语句或存储过程名</param> 
  83.         /// <param name="commandType">执行类型</param> 
  84.         /// <param name="cmdParms">SQL参数对象</param> 
  85.         /// <returns>所受影响的行数</returns> 
  86.         public static int ExecuteNonQuery(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms) 
  87.         { 
  88.             int result = 0; 
  89.             if (connectionString == null || connectionString.Length == 0) 
  90.                 throw new ArgumentNullException("connectionString"); 
  91.             if (commandText == null || commandText.Length == 0) 
  92.                 throw new ArgumentNullException("commandText"); 
  93.  
  94.             SQLiteCommand cmd = new SQLiteCommand(); 
  95.             using (SQLiteConnection con = new SQLiteConnection(connectionString)) 
  96.             { 
  97.                 SQLiteTransaction trans = null
  98.                 PrepareCommand(cmd, con, ref trans, true, commandType, commandText); 
  99.                 try 
  100.                 { 
  101.                     result = cmd.ExecuteNonQuery(); 
  102.                     trans.Commit(); 
  103.                 } 
  104.                 catch (Exception ex) 
  105.                 { 
  106.                     trans.Rollback(); 
  107.                     throw ex; 
  108.                 } 
  109.             } 
  110.             return result; 
  111.         } 
  112.         #endregion 
  113.  
  114.         #region ExecuteScalar 
  115.         /// <summary> 
  116.         /// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据 
  117.         /// </summary> 
  118.         /// <param name="connectionString">连接字符串</param> 
  119.         /// <param name="cmd">SqlCommand对象</param> 
  120.         /// <returns>查询所得的第1行第1列数据</returns> 
  121.         public static object ExecuteScalar(string connectionString, SQLiteCommand cmd) 
  122.         { 
  123.             object result = 0; 
  124.             if (connectionString == null || connectionString.Length == 0) 
  125.                 throw new ArgumentNullException("connectionString"); 
  126.             using (SQLiteConnection con = new SQLiteConnection(connectionString)) 
  127.             { 
  128.                 SQLiteTransaction trans = null
  129.                 PrepareCommand(cmd, con, ref trans, true, cmd.CommandType, cmd.CommandText); 
  130.                 try 
  131.                 { 
  132.                     result = cmd.ExecuteScalar(); 
  133.                     trans.Commit(); 
  134.                 } 
  135.                 catch (Exception ex) 
  136.                 { 
  137.                     trans.Rollback(); 
  138.                     throw ex; 
  139.                 } 
  140.             } 
  141.             return result; 
  142.         } 
  143.  
  144.         /// <summary> 
  145.         /// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据 
  146.         /// </summary> 
  147.         /// <param name="connectionString">连接字符串</param> 
  148.         /// <param name="commandText">执行语句或存储过程名</param> 
  149.         /// <param name="commandType">执行类型</param> 
  150.         /// <returns>查询所得的第1行第1列数据</returns> 
  151.         public static object ExecuteScalar(string connectionString, string commandText, CommandType commandType) 
  152.         { 
  153.             object result = 0; 
  154.             if (connectionString == null || connectionString.Length == 0) 
  155.                 throw new ArgumentNullException("connectionString"); 
  156.             if (commandText == null || commandText.Length == 0) 
  157.                 throw new ArgumentNullException("commandText"); 
  158.             SQLiteCommand cmd = new SQLiteCommand(); 
  159.             using (SQLiteConnection con = new SQLiteConnection(connectionString)) 
  160.             { 
  161.                 SQLiteTransaction trans = null
  162.                 PrepareCommand(cmd, con, ref trans, true, commandType, commandText); 
  163.                 try 
  164.                 { 
  165.                     result = cmd.ExecuteScalar(); 
  166.                     trans.Commit(); 
  167.                 } 
  168.                 catch (Exception ex) 
  169.                 { 
  170.                     trans.Rollback(); 
  171.                     throw ex; 
  172.                 } 
  173.             } 
  174.             return result; 
  175.         } 
  176.  
  177.         /// <summary> 
  178.         /// 执行数据库操作(新增、更新或删除)同时返回执行后查询所得的第1行第1列数据 
  179.         /// </summary> 
  180.         /// <param name="connectionString">连接字符串</param> 
  181.         /// <param name="commandText">执行语句或存储过程名</param> 
  182.         /// <param name="commandType">执行类型</param> 
  183.         /// <param name="cmdParms">SQL参数对象</param> 
  184.         /// <returns>查询所得的第1行第1列数据</returns> 
  185.         public static object ExecuteScalar(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms) 
  186.         { 
  187.             object result = 0; 
  188.             if (connectionString == null || connectionString.Length == 0) 
  189.                 throw new ArgumentNullException("connectionString"); 
  190.             if (commandText == null || commandText.Length == 0) 
  191.                 throw new ArgumentNullException("commandText"); 
  192.  
  193.             SQLiteCommand cmd = new SQLiteCommand(); 
  194.             using (SQLiteConnection con = new SQLiteConnection(connectionString)) 
  195.             { 
  196.                 SQLiteTransaction trans = null
  197.                 PrepareCommand(cmd, con, ref trans, true, commandType, commandText); 
  198.                 try 
  199.                 { 
  200.                     result = cmd.ExecuteScalar(); 
  201.                     trans.Commit(); 
  202.                 } 
  203.                 catch (Exception ex) 
  204.                 { 
  205.                     trans.Rollback(); 
  206.                     throw ex; 
  207.                 } 
  208.             } 
  209.             return result; 
  210.         } 
  211.         #endregion 
  212.  
  213.         #region ExecuteReader 
  214.         /// <summary> 
  215.         /// 执行数据库查询,返回SqlDataReader对象 
  216.         /// </summary> 
  217.         /// <param name="connectionString">连接字符串</param> 
  218.         /// <param name="cmd">SqlCommand对象</param> 
  219.         /// <returns>SqlDataReader对象</returns> 
  220.         public static DbDataReader ExecuteReader(string connectionString, SQLiteCommand cmd) 
  221.         { 
  222.             DbDataReader reader = null
  223.             if (connectionString == null || connectionString.Length == 0) 
  224.                 throw new ArgumentNullException("connectionString"); 
  225.  
  226.             SQLiteConnection con = new SQLiteConnection(connectionString); 
  227.             SQLiteTransaction trans = null
  228.             PrepareCommand(cmd, con,ref trans, false, cmd.CommandType, cmd.CommandText); 
  229.             try 
  230.             { 
  231.                 reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
  232.             } 
  233.             catch (Exception ex) 
  234.             { 
  235.                 throw ex; 
  236.             } 
  237.             return reader; 
  238.         } 
  239.  
  240.         /// <summary> 
  241.         /// 执行数据库查询,返回SqlDataReader对象 
  242.         /// </summary> 
  243.         /// <param name="connectionString">连接字符串</param> 
  244.         /// <param name="commandText">执行语句或存储过程名</param> 
  245.         /// <param name="commandType">执行类型</param> 
  246.         /// <returns>SqlDataReader对象</returns> 
  247.         public static DbDataReader ExecuteReader(string connectionString, string commandText, CommandType commandType) 
  248.         { 
  249.             DbDataReader reader = null
  250.             if (connectionString == null || connectionString.Length == 0) 
  251.                 throw new ArgumentNullException("connectionString"); 
  252.             if (commandText == null || commandText.Length == 0) 
  253.                 throw new ArgumentNullException("commandText"); 
  254.  
  255.             SQLiteConnection con = new SQLiteConnection(connectionString); 
  256.             SQLiteCommand cmd = new SQLiteCommand(); 
  257.             SQLiteTransaction trans = null
  258.             PrepareCommand(cmd, con, ref trans, false, commandType, commandText); 
  259.             try 
  260.             { 
  261.                 reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
  262.             } 
  263.             catch (Exception ex) 
  264.             { 
  265.                 throw ex; 
  266.             } 
  267.             return reader; 
  268.         } 
  269.  
  270.         /// <summary> 
  271.         /// 执行数据库查询,返回SqlDataReader对象 
  272.         /// </summary> 
  273.         /// <param name="connectionString">连接字符串</param> 
  274.         /// <param name="commandText">执行语句或存储过程名</param> 
  275.         /// <param name="commandType">执行类型</param> 
  276.         /// <param name="cmdParms">SQL参数对象</param> 
  277.         /// <returns>SqlDataReader对象</returns> 
  278.         public static DbDataReader ExecuteReader(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms) 
  279.         { 
  280.             DbDataReader reader = null
  281.             if (connectionString == null || connectionString.Length == 0) 
  282.                 throw new ArgumentNullException("connectionString"); 
  283.             if (commandText == null || commandText.Length == 0) 
  284.                 throw new ArgumentNullException("commandText"); 
  285.  
  286.             SQLiteConnection con = new SQLiteConnection(connectionString); 
  287.             SQLiteCommand cmd = new SQLiteCommand(); 
  288.             SQLiteTransaction trans = null
  289.             PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms); 
  290.             try 
  291.             { 
  292.                 reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); 
  293.             } 
  294.             catch (Exception ex) 
  295.             { 
  296.                 throw ex; 
  297.             } 
  298.             return reader; 
  299.         } 
  300.         #endregion 
  301.  
  302.         #region ExecuteDataSet 
  303.         /// <summary> 
  304.         /// 执行数据库查询,返回DataSet对象 
  305.         /// </summary> 
  306.         /// <param name="connectionString">连接字符串</param> 
  307.         /// <param name="cmd">SqlCommand对象</param> 
  308.         /// <returns>DataSet对象</returns> 
  309.         public static DataSet ExecuteDataSet(string connectionString, SQLiteCommand cmd) 
  310.         { 
  311.             DataSet ds = new DataSet(); 
  312.             SQLiteConnection con = new SQLiteConnection(connectionString); 
  313.             SQLiteTransaction trans = null
  314.             PrepareCommand(cmd, con, ref trans, false, cmd.CommandType, cmd.CommandText); 
  315.             try 
  316.             { 
  317.                 SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd); 
  318.                 sda.Fill(ds); 
  319.             } 
  320.             catch (Exception ex) 
  321.             { 
  322.                 throw ex; 
  323.             } 
  324.             finally 
  325.             { 
  326.                 if (cmd.Connection != null
  327.                 { 
  328.                     if (cmd.Connection.State == ConnectionState.Open) 
  329.                     { 
  330.                         cmd.Connection.Close(); 
  331.                     } 
  332.                 } 
  333.             } 
  334.             return ds; 
  335.         } 
  336.  
  337.         /// <summary> 
  338.         /// 执行数据库查询,返回DataSet对象 
  339.         /// </summary> 
  340.         /// <param name="connectionString">连接字符串</param> 
  341.         /// <param name="commandText">执行语句或存储过程名</param> 
  342.         /// <param name="commandType">执行类型</param> 
  343.         /// <returns>DataSet对象</returns> 
  344.         public static DataSet ExecuteDataSet(string connectionString, string commandText, CommandType commandType) 
  345.         { 
  346.             if (connectionString == null || connectionString.Length == 0) 
  347.                 throw new ArgumentNullException("connectionString"); 
  348.             if (commandText == null || commandText.Length == 0) 
  349.                 throw new ArgumentNullException("commandText"); 
  350.             DataSet ds = new DataSet(); 
  351.             SQLiteConnection con = new SQLiteConnection(connectionString); 
  352.             SQLiteCommand cmd = new SQLiteCommand(); 
  353.             SQLiteTransaction trans = null
  354.             PrepareCommand(cmd, con, ref trans, false, commandType, commandText); 
  355.             try 
  356.             { 
  357.                 SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd); 
  358.                 sda.Fill(ds); 
  359.             } 
  360.             catch (Exception ex) 
  361.             { 
  362.                 throw ex; 
  363.             } 
  364.             finally 
  365.             { 
  366.                 if (con != null
  367.                 { 
  368.                     if (con.State == ConnectionState.Open) 
  369.                     { 
  370.                         con.Close(); 
  371.                     } 
  372.                 } 
  373.             } 
  374.             return ds; 
  375.         } 
  376.  
  377.         /// <summary> 
  378.         /// 执行数据库查询,返回DataSet对象 
  379.         /// </summary> 
  380.         /// <param name="connectionString">连接字符串</param> 
  381.         /// <param name="commandText">执行语句或存储过程名</param> 
  382.         /// <param name="commandType">执行类型</param> 
  383.         /// <param name="cmdParms">SQL参数对象</param> 
  384.         /// <returns>DataSet对象</returns> 
  385.         public static DataSet ExecuteDataSet(string connectionString, string commandText, CommandType commandType, params SQLiteParameter[] cmdParms) 
  386.         { 
  387.             if (connectionString == null || connectionString.Length == 0) 
  388.                 throw new ArgumentNullException("connectionString"); 
  389.             if (commandText == null || commandText.Length == 0) 
  390.                 throw new ArgumentNullException("commandText"); 
  391.             DataSet ds = new DataSet(); 
  392.             SQLiteConnection con = new SQLiteConnection(connectionString); 
  393.             SQLiteCommand cmd = new SQLiteCommand(); 
  394.             SQLiteTransaction trans = null
  395.             PrepareCommand(cmd, con, ref trans, false, commandType, commandText, cmdParms); 
  396.             try 
  397.             { 
  398.                 SQLiteDataAdapter sda = new SQLiteDataAdapter(cmd); 
  399.                 sda.Fill(ds); 
  400.             } 
  401.             catch (Exception ex) 
  402.             { 
  403.                 throw ex; 
  404.             } 
  405.             finally 
  406.             { 
  407.                 if (con != null
  408.                 { 
  409.                     if (con.State == ConnectionState.Open) 
  410.                     { 
  411.                         con.Close(); 
  412.                     } 
  413.                 } 
  414.             } 
  415.             return ds; 
  416.         } 
  417.         #endregion 
  418.  
  419.         /// <summary> 
  420.         /// 通用分页查询方法 
  421.         /// </summary> 
  422.         /// <param name="connString">连接字符串</param> 
  423.         /// <param name="tableName">表名</param> 
  424.         /// <param name="strColumns">查询字段名</param> 
  425.         /// <param name="strWhere">where条件</param> 
  426.         /// <param name="strOrder">排序条件</param> 
  427.         /// <param name="pageSize">每页数据数量</param> 
  428.         /// <param name="currentIndex">当前页数</param> 
  429.         /// <param name="recordOut">数据总量</param> 
  430.         /// <returns>DataTable数据表</returns> 
  431.         public static DataTable SelectPaging(string connString, string tableName, string strColumns, string strWhere, string strOrder, int pageSize, int currentIndex, out int recordOut) 
  432.         { 
  433.             DataTable dt = new DataTable(); 
  434.             recordOut = Convert.ToInt32(ExecuteScalar(connString, "select count(*) from " + tableName, CommandType.Text)); 
  435.             string pagingTemplate = "select {0} from {1} where {2} order by {3} limit {4} offset {5} "
  436.             int offsetCount = (currentIndex - 1) * pageSize; 
  437.             string commandText = String.Format(pagingTemplate, strColumns, tableName, strWhere, strOrder, pageSize.ToString(), offsetCount.ToString()); 
  438.             using (DbDataReader reader = ExecuteReader(connString, commandText, CommandType.Text)) 
  439.             { 
  440.                 if (reader != null
  441.                 { 
  442.                     dt.Load(reader); 
  443.                 } 
  444.             } 
  445.             return dt; 
  446.         } 
  447.  
  448.         /// <summary> 
  449.         /// 预处理Command对象,数据库链接,事务,需要执行的对象,参数等的初始化 
  450.         /// </summary> 
  451.         /// <param name="cmd">Command对象</param> 
  452.         /// <param name="conn">Connection对象</param> 
  453.         /// <param name="trans">Transcation对象</param> 
  454.         /// <param name="useTrans">是否使用事务</param> 
  455.         /// <param name="cmdType">SQL字符串执行类型</param> 
  456.         /// <param name="cmdText">SQL Text</param> 
  457.         /// <param name="cmdParms">SQLiteParameters to use in the command</param> 
  458.         private static void PrepareCommand(SQLiteCommand cmd, SQLiteConnection conn, ref SQLiteTransaction trans, bool useTrans, CommandType cmdType, string cmdText, params SQLiteParameter[] cmdParms) 
  459.         { 
  460.  
  461.             if (conn.State != ConnectionState.Open) 
  462.                 conn.Open(); 
  463.  
  464.             cmd.Connection = conn; 
  465.             cmd.CommandText = cmdText; 
  466.  
  467.             if (useTrans) 
  468.             { 
  469.                 trans = conn.BeginTransaction(IsolationLevel.ReadCommitted); 
  470.                 cmd.Transaction = trans; 
  471.             } 
  472.  
  473.  
  474.             cmd.CommandType = cmdType; 
  475.  
  476.             if (cmdParms != null
  477.             { 
  478.                 foreach (SQLiteParameter parm in cmdParms) 
  479.                     cmd.Parameters.Add(parm); 
  480.             } 
  481.         } 
  482.     } 

本站热点业务

更多模板/案例展示

关于我们 | 联系我们 | 团队日志 | 网站地图 | 网站合作