[C#] 改進SqliteHelper, 減少拼接SQL語句

說明:開始幾個是基本的方法,後面稍微封裝了下

  1 public class SqliteHelper
  2     {
  3         //連接字符串
  4         private static readonly string str = ConfigurationManager.ConnectionStrings["conStr"].ConnectionString;
  5 
  6         /// <summary>
  7         /// 增刪改
  8         /// 20180723
  9         /// </summary>
 10         /// <param name="sql">sql語句</param>
 11         /// <param name="param">sql參數</param>
 12         /// <returns>受影響的行數</returns>
 13         public static int ExecuteNonQuery(string sql, params SQLiteParameter[] param)
 14         {
 15             //try
 16             //{
 17                 using (SQLiteConnection con = new SQLiteConnection(str))
 18                 {
 19                     using (SQLiteCommand cmd = new SQLiteCommand(sql, con))
 20                     {
 21                         con.Open();
 22                         if (param != null)
 23                         {
 24                             cmd.Parameters.AddRange(param);
 25                         }
 26 
 27                         string sql2 = cmd.CommandText;
 28                         //con.Close();
 29                         return cmd.ExecuteNonQuery();
 30                     }
 31                 }
 32             //}
 33             //catch (SQLiteException se)
 34             //{
 35             //    return 0;
 36             //}
 37         }
 38 
 39         /// <summary>
 40         /// 查詢
 41         /// 20180723
 42         /// </summary>
 43         /// <param name="sql">sql語句</param>
 44         /// <param name="param">sql參數</param>
 45         /// <returns>首行首列</returns>
 46         public static object ExecuteScalar(string sql, params SQLiteParameter[] param) 
 47         {
 48             using(SQLiteConnection con = new SQLiteConnection(str))
 49             {
 50                 using(SQLiteCommand cmd = new SQLiteCommand(sql, con))
 51                 {
 52                     con.Open();
 53                     if (param != null) 
 54                     {
 55                         cmd.Parameters.AddRange(param);
 56                     }
 57 
 58                     return cmd.ExecuteScalar();
 59                 }
 60             }
 61         }
 62 
 63         /// <summary>
 64         /// 多行查詢
 65         /// 20180723
 66         /// </summary>
 67         /// <param name="sql">sql語句</param>
 68         /// <param name="param">sql參數</param>
 69         /// <returns>SQLiteDateReader</returns>
 70         public static SQLiteDataReader ExecuteReader(string sql, params SQLiteParameter[] param)
 71         {
 72             using (SQLiteConnection con = new SQLiteConnection(str))
 73             {
 74                 using (SQLiteCommand cmd = new SQLiteCommand(sql, con))
 75                 {
 76                     if (param != null)
 77                     {
 78                         cmd.Parameters.AddRange(param);
 79                     }
 80                     try
 81                     {
 82                         con.Open();
 83                         return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
 84                     }
 85                     catch (Exception ex)
 86                     {
 87                         con.Close();
 88                         con.Dispose();
 89                         throw ex;
 90                     }
 91                 }
 92             }
 93        
 94         }
 95 
 96         /// <summary>
 97         /// 查詢多行數據
 98         /// 20180723
 99         /// </summary>
100         /// <param name="sql">sql語句</param>
101         /// <param name="param">sql參數</param>
102         /// <returns>一個表</returns>
103         public static DataTable ExecuteTable(string sql, params SQLiteParameter[] param)
104         {
105             DataTable dt = new DataTable();
106             using (SQLiteDataAdapter sda = new SQLiteDataAdapter(sql, str))
107             {
108                 if (param != null)
109                 {
110                     sda.SelectCommand.Parameters.AddRange(param);
111                 }
112                 sda.Fill(dt);
113             }
114             return dt;
115         }
116 
117         /// <summary>
118         /// 查詢封裝
119         /// 20180725
120         /// </summary>
121         /// <param name="tbName">表名</param>
122         /// <param name="fields">查詢需要的字段名:"id, name, age"</param>
123         /// <param name="where">查詢條件:"id = 1"</param>
124         /// <param name="orderBy">排序:"id desc"</param>
125         /// <param name="limit">分頁:"0,10"</param>
126         /// <param name="param">sql參數</param>
127         /// <returns>受影響行數</returns>
128         public static DataTable QueryTable(string tbName, string fields = "*", string where = "1", string orderBy = "", string limit = "", params SQLiteParameter[] param)
129         {
130             //排序
131             if (orderBy != "")
132             {
133                 orderBy = "ORDER BY " + orderBy;//Deom: ORDER BY id desc
134             }
135 
136             //分頁
137             if (limit != "")
138             {
139                 limit = "LIMIT " + limit;//Deom: LIMIT 0,10
140             }
141 
142             string sql = string.Format("SELECT {0} FROM `{1}` WHERE {2} {3} {4}", fields, tbName, where, orderBy, limit);
143 
144             //return sql;
145             return SqliteHelper.ExecuteTable(sql, param);
146 
147         }
148 
149         /// <summary>
150         /// 數據插入
151         /// 20180725
152         /// </summary>
153         /// <param name="tbName">表名</param>
154         /// <param name="insertData">需要插入的數據字典</param>
155         /// <returns>受影響行數</returns>
156         public static int ExecuteInsert(string tbName, Dictionary<String , String> insertData)
157         {
158             string point = "";//分隔符號(,)
159             string keyStr = "";//字段名拼接字符串
160             string valueStr = "";//值的拼接字符串
161 
162             List<SQLiteParameter> param = new List<SQLiteParameter>();
163             foreach (string key in insertData.Keys)
164             {
165                 keyStr += string.Format("{0} `{1}`", point, key);
166                 valueStr += string.Format("{0} @{1}", point, key);
167                 param.Add(new SQLiteParameter("@"+key, insertData[key]));
168                 point = ",";
169             }
170             string sql = string.Format("INSERT INTO `{0}`({1}) VALUES({2})", tbName, keyStr, valueStr);
171 
172             //return sql;
173             return ExecuteNonQuery(sql, param.ToArray());
174 
175         }
176 
177         /// <summary>
178         /// 執行Update語句
179         /// 20180725
180         /// </summary>
181         /// <param name="tbName">表名</param>
182         /// <param name="where">更新條件:id=1</param>
183         /// <param name="insertData">需要更新的數據</param>
184         /// <returns>受影響行數</returns>
185         public static int ExecuteUpdate(string tbName, string where, Dictionary<String, String> insertData)
186         {
187             string point = "";//分隔符號(,)
188             string kvStr = "";//鍵值對拼接字符串(Id=@Id)
189 
190             List<SQLiteParameter> param = new List<SQLiteParameter>();
191             foreach (string key in insertData.Keys)
192             {
193                 kvStr += string.Format("{0} {1}=@{2}",point, key, key);
194                 param.Add(new SQLiteParameter("@" + key, insertData[key]));
195                 point = ",";
196             }
197             string sql = string.Format("UPDATE `{0}` SET {1} WHERE {2}", tbName, kvStr, where);
198 
199             return ExecuteNonQuery(sql, param.ToArray());
200 
201         }
202 
203 
204     }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章