实现操作SQLite

  1 internal class SQLiteHelper : IDisposable
  2     {
  3         private SQLiteConnection conn = null;
  4         protected SQLiteCommand cmd = null;
  5         protected SQLiteDataReader sdr = null;
  6         ///
  7         /// 构造函数
  8         ///
  9         public SQLiteHelper(string connStr)
 10         {
 11             conn = new SQLiteConnection(connStr);
 12         }
 13         ///
 14         /// 获取连接结果,未连接打开连接
 15         ///
 16         /// 连接结果
 17         protected SQLiteConnection GetConn()
 18         {
 19             if (conn.State == ConnectionState.Closed)
 20             {
 21                 conn.Open();
 22             }
 23             return conn;
 24         }
 25 
 26         ///
 27         /// 获取连接结果,未连接打开连接
 28         ///
 29         /// 连接结果
 30         protected void Close()
 31         {
 32             if (conn.State == ConnectionState.Open)
 33             {
 34                 conn.Close();
 35             }
 36         }
 37 
 38         ///
 39         /// 该方法执行传入的增删改SQL语句
 40         ///
 41         /// 要执行的增删改SQL语句
 42         /// 返回更新的记录数
 43         public int ExecuteNonQuery(string sql)
 44         {
 45             int res;
 46             try
 47             {
 48                 cmd = new SQLiteCommand(sql, GetConn());
 49                 res = cmd.ExecuteNonQuery();
 50             }
 51             catch (Exception ex)
 52             {
 53                 res = -1;
 54                 throw ex;
 55             }
 56             finally
 57             {
 58                 if (conn.State == ConnectionState.Open)
 59                 {
 60                     conn.Close();
 61                 }
 62             }
 63             return res;
 64         }
 65         ///
 66         /// 执行带参数的SQL增删改语句
 67         ///
 68         /// SQL增删改语句
 69         /// 参数集合
 70         /// 返回更新的记录数
 71         public int ExecuteNonQuery(string sql, SQLiteParameter[] paras)
 72         {
 73             int res;
 74             using (cmd = new SQLiteCommand(sql, GetConn()))
 75             {
 76                 cmd.Parameters.AddRange(paras);
 77                 res = cmd.ExecuteNonQuery();
 78             }
 79             return res;
 80         }
 81         ///
 82         /// 该方法执行传入的SQL查询语句
 83         ///
 84         /// SQL查询语句
 85         /// 返回数据集合
 86         public DataTable ExecuteQuery(string sql)
 87         {
 88             DataTable dt = new DataTable();
 89             cmd = new SQLiteCommand(sql, GetConn());
 90             using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
 91             {
 92                 dt.Load(sdr);
 93             }
 94             return dt;
 95         }
 96         ///
 97         /// 执行带参数的SQL查询语句
 98         ///
 99         /// SQL查询语句
100         /// 参数集合
101         /// 返回数据集合
102         public DataTable ExecuteQuery(string sql, SQLiteParameter[] paras)
103         {
104             DataTable dt = new DataTable();
105             cmd = new SQLiteCommand(sql, GetConn());
106             cmd.Parameters.AddRange(paras);
107             using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
108             {
109                 dt.Load(sdr);
110             }
111             return dt;
112         }
113 
114 
115         /// <summary>
116         /// 反回第一行第一列
117         /// </summary>
118         /// <param name="sql"></param>
119         /// <param name="paras"></param>
120         /// <returns></returns>
121         public string GetString(string sql, SQLiteParameter[] paras)
122         {
123             DataTable dt = new DataTable();
124             cmd = new SQLiteCommand(sql, GetConn());
125             cmd.Parameters.AddRange(paras);
126             var reval = cmd.ExecuteScalar();
127             return reval.ToString();
128         }
129         /// <summary>
130         /// 反回第一行第一列
131         /// </summary>
132         /// <param name="sql"></param>
133         /// <param name="paras"></param>
134         /// <returns></returns>
135         public int GetInt(string sql, SQLiteParameter[] paras)
136         {
137             DataTable dt = new DataTable();
138             cmd = new SQLiteCommand(sql, GetConn());
139             cmd.Parameters.AddRange(paras);
140             var reval = cmd.ExecuteScalar();
141             return Convert.ToInt32(reval);
142         }
143 
144         ///
145         /// 执行带参数的SQL查询判断语句
146         ///
147         /// SQL查询语句
148         /// 参数集合
149         /// 返回是否为空
150         public bool BoolExecuteQuery(string sql, SQLiteParameter[] paras)
151         {
152             DataTable dt = new DataTable();
153             cmd = new SQLiteCommand(sql, GetConn());
154             cmd.Parameters.AddRange(paras);
155             try
156             {
157                 using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
158                 {
159                     dt.Load(sdr);
160                 }
161             }
162             catch (Exception e)
163             {
164                 throw e;
165             }
166             DataRow[] rows = dt.Select();
167             bool temp = false;
168             if (rows.Length > 0)
169             {
170                 temp = true;
171             }
172             return temp;
173         }
174         ///
175         /// 该方法执行传入的SQL查询判断语句
176         ///
177         /// SQL查询语句
178         /// 返回是否为空
179         public bool BoolExecuteQuery(string sql)
180         {
181             DataTable dt = new DataTable();
182             cmd = new SQLiteCommand(sql, GetConn());
183             using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
184             {
185                 dt.Load(sdr);
186             }
187             DataRow[] rows = dt.Select();
188             bool temp = false;
189             if (rows.Length > 0)
190             {
191                 temp = true;
192             }
193             return temp;
194         }
195 
196         public void Dispose()
197         {
198             Close();
199         }
200     }
SQLiteHelper帮助类
  1  internal class Common
  2     {
  3 
  4          /// <summary>
  5         /// 将dataTable转成List<T>
  6         /// </summary>
  7         /// <typeparam name="T"></typeparam>
  8         /// <param name="dt"></param>
  9         /// <returns></returns>
 10         public static List<T> List<T>(DataTable dt)
 11         {
 12             var list = new List<T>();
 13             Type t = typeof(T);
 14             var plist = new List<PropertyInfo>(typeof(T).GetProperties());
 15  
 16             foreach (DataRow item in dt.Rows)
 17             {
 18                 T s = System.Activator.CreateInstance<T>();
 19                 for (int i = 0; i < dt.Columns.Count; i++)
 20                 {
 21                     PropertyInfo info = plist.Find(p => p.Name == dt.Columns[i].ColumnName);
 22                     if (info != null)
 23                     {
 24                         if (!Convert.IsDBNull(item[i]))
 25                         {
 26                             info.SetValue(s, item[i], null);
 27                         }
 28                     }
 29                 }
 30                 list.Add(s);
 31             }
 32             return list;
 33         } 
 34 
 35 
 36         /// <summary>
 37         /// 将数组转为 '1','2' 这种格式的字符串 用于 where id in(  )
 38         /// </summary>
 39         /// <param name="array"></param>
 40         /// <returns></returns>
 41         public static string ToJoinSqlInVal(object[] array)
 42         {
 43             if (array == null || array.Length == 0)
 44             {
 45                 return "''";
 46             }
 47             else
 48             {
 49                 return string.Join(",", array.Where(c => c != null).Select(c => "'" + (c + "").Replace("'", "''") + "'"));//除止SQL注入
 50             }
 51         }
 52 
 53         public static SQLiteParameter[] GetObjectToSQLiteParameter(object obj)
 54         {
 55             List<SQLiteParameter> listParams = new List<SQLiteParameter>();
 56             var propertiesObj = obj.GetType().GetProperties();
 57             string replaceGuid = Guid.NewGuid().ToString();
 58             foreach (PropertyInfo r in propertiesObj)
 59             {
 60                 listParams.Add(new SQLiteParameter("@" + r.Name, r.GetValue(obj,null).ToString()));
 61             }
 62 
 63             return listParams.ToArray();
 64         }
 65 
 66         public static Dictionary<string,string> GetObjectToDictionary(object obj)
 67         {
 68             Dictionary<string,string> reval = new Dictionary<string,string>();
 69             var propertiesObj = obj.GetType().GetProperties();
 70             string replaceGuid = Guid.NewGuid().ToString();
 71             foreach (PropertyInfo r in propertiesObj)
 72             {
 73                 reval.Add(r.Name, r.GetValue(obj,null).ToString());
 74             }
 75 
 76             return reval;
 77         }
 78 
 79         public static string BinarExpressionProvider(Expression left, Expression right, ExpressionType type)
 80         {
 81             string sb = "(";
 82             //先处理左边
 83             sb += ExpressionRouter(left);
 84             sb += ExpressionTypeCast(type);
 85             //再处理右边
 86             string tmpStr = ExpressionRouter(right);
 87             if (tmpStr == "null")
 88             {
 89                 if (sb.EndsWith(" ="))
 90                     sb = sb.Substring(0, sb.Length - 2) + " is null";
 91                 else if (sb.EndsWith("<>"))
 92                     sb = sb.Substring(0, sb.Length - 2) + " is not null";
 93             }
 94             else
 95                 sb += tmpStr;
 96             return sb += ")";
 97         }
 98         //表达式路由计算 
 99         static string ExpressionRouter(Expression exp)
100         {
101             string sb = string.Empty;
102             if (exp is BinaryExpression)
103             {
104                 BinaryExpression be = ((BinaryExpression)exp);
105                 return BinarExpressionProvider(be.Left, be.Right, be.NodeType);
106             }
107             else if (exp is MemberExpression)
108             {
109                 MemberExpression me = ((MemberExpression)exp);
110                 return me.Member.Name;
111             }
112             else if (exp is NewArrayExpression)
113             {
114                 NewArrayExpression ae = ((NewArrayExpression)exp);
115                 StringBuilder tmpstr = new StringBuilder();
116                 foreach (Expression ex in ae.Expressions)
117                 {
118                     tmpstr.Append(ExpressionRouter(ex));
119                     tmpstr.Append(",");
120                 }
121                 return tmpstr.ToString(0, tmpstr.Length - 1);
122             }
123             else if (exp is MethodCallExpression)
124             {
125                 MethodCallExpression mce = (MethodCallExpression)exp;
126                 if (mce.Method.Name == "Like")
127                     return string.Format("({0} like {1})", ExpressionRouter(mce.Arguments[0]), ExpressionRouter(mce.Arguments[1]));
128                 else if (mce.Method.Name == "NotLike")
129                     return string.Format("({0} Not like {1})", ExpressionRouter(mce.Arguments[0]), ExpressionRouter(mce.Arguments[1]));
130                 else if (mce.Method.Name == "In")
131                     return string.Format("{0} In ({1})", ExpressionRouter(mce.Arguments[0]), ExpressionRouter(mce.Arguments[1]));
132                 else if (mce.Method.Name == "NotIn")
133                     return string.Format("{0} Not In ({1})", ExpressionRouter(mce.Arguments[0]), ExpressionRouter(mce.Arguments[1]));
134             }
135             else if (exp is ConstantExpression)
136             {
137                 ConstantExpression ce = ((ConstantExpression)exp);
138                 if (ce.Value == null)
139                     return "null";
140                 else if (ce.Value is ValueType)
141                     return ce.Value.ToString();
142                 else if (ce.Value is string || ce.Value is DateTime || ce.Value is char)
143                     return string.Format("'{0}'", ce.Value.ToString());
144             }
145             else if (exp is UnaryExpression)
146             {
147                 UnaryExpression ue = ((UnaryExpression)exp);
148                 return ExpressionRouter(ue.Operand);
149             }
150             return null;
151         }
152         static string ExpressionTypeCast(ExpressionType type)
153         {
154             switch (type)
155             {
156                 case ExpressionType.And:
157                 case ExpressionType.AndAlso:
158                     return " AND ";
159                 case ExpressionType.Equal:
160                     return " =";
161                 case ExpressionType.GreaterThan:
162                     return " >";
163                 case ExpressionType.GreaterThanOrEqual:
164                     return ">=";
165                 case ExpressionType.LessThan:
166                     return "<";
167                 case ExpressionType.LessThanOrEqual:
168                     return "<=";
169                 case ExpressionType.NotEqual:
170                     return "<>";
171                 case ExpressionType.Or:
172                 case ExpressionType.OrElse:
173                     return " Or ";
174                 case ExpressionType.Add:
175                 case ExpressionType.AddChecked:
176                     return "+";
177                 case ExpressionType.Subtract:
178                 case ExpressionType.SubtractChecked:
179                     return "-";
180                 case ExpressionType.Divide:
181                     return "/";
182                 case ExpressionType.Multiply:
183                 case ExpressionType.MultiplyChecked:
184                     return "*";
185                 default:
186                     return null;
187             }
188         }
189     }
Common
 1 public class ClassGenerating
 2     {
 3         /// <summary>
 4         /// 根据DataTable获取实体类的字符串
 5         /// </summary>
 6         /// <param name="sql"></param>
 7         /// <param name="className"></param>
 8         /// <returns></returns>
 9         public static string DataTableToClass(DataTable dt,string tableName,string nameSpace)
10         {
11             StringBuilder reval = new StringBuilder();
12             StringBuilder propertiesValue = new StringBuilder();
13             string replaceGuid = Guid.NewGuid().ToString();
14             foreach (DataColumn r in dt.Columns)
15             {
16                 propertiesValue.AppendFormat("           public {0} {1} {2}", r.DataType, r.ColumnName, "{get;set;}\r\n");
17 
18             }
19             reval.AppendFormat(@"using System;
20 using System.Collections.Generic;
21 using System.Linq;
22 using System.Text;
23 namespace  {2}{{
24 
25  public class {0}{{
26 {1}
27   }}
28 }} ", tableName, propertiesValue,nameSpace);
29 
30 
31             return reval.ToString();
32         }
33     }
ClassGenerating
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data;
  4 using System.Data.SQLite;
  5 using System.IO;
  6 using System.Linq;
  7 using System.Reflection;
  8 using System.Text;
  9 using System.Threading.Tasks;
 10 using System.Linq.Expressions;
 11 
 12 public class Easyliter
 13     {
 14         private string _connstr = null;
 15         public string message { get; set; }
 16         public Easyliter(string connstr)
 17         {
 18             _connstr = connstr;
 19         }
 20 
 21         /// <summary>
 22         /// 根据SQL查询
 23         /// </summary>
 24         /// <typeparam name="T"></typeparam>
 25         /// <param name="sql"></param>
 26         /// <param name="pars">例如 : new { id>0 }</param>
 27         /// <returns>查询结果</returns> 
 28         public List<T> Select<T>(string sql, object pars)
 29         {
 30             var dt = GetDataTable(sql, Common.GetObjectToSQLiteParameter(pars));
 31             var reval = Common.List<T>(dt);
 32             return reval;
 33         }
 34 
 35         /// <summary>
 36         /// 根据拉姆达表达示查询
 37         /// </summary>
 38         /// <typeparam name="T"></typeparam>
 39         /// <param name="whereExpressions">查询表达示</param>
 40         /// <returns></returns>
 41         public List<T> Select<T>(params  Expression<Func<T, bool>>[] whereExpressions) where T : new()
 42         {
 43 
 44             var tEntity = new T();
 45             var type = tEntity.GetType();
 46             string whereStr = string.Empty;
 47             if (whereExpressions != null && whereExpressions.Length > 0)
 48             {
 49                 foreach (var expression in whereExpressions)
 50                 {
 51                     if (expression.Body is BinaryExpression)
 52                     {
 53                         BinaryExpression be = ((BinaryExpression)expression.Body);
 54                         whereStr = " and " + Common.BinarExpressionProvider(be.Left, be.Right, be.NodeType);
 55                     }
 56                 }
 57             }
 58             string sql = string.Format("select * from {0} where 1=1  {1} ", type.Name, whereStr);
 59             var dt = GetDataTable(sql);
 60             var reval = Common.List<T>(dt);
 61             return reval;
 62         }
 63 
 64 
 65         /// <summary>
 66         /// 根据拉姆达表达示查询
 67         /// </summary>
 68         /// <typeparam name="T"></typeparam>
 69         /// <param name="pageIndex"></param>
 70         /// <param name="pageSize"></param>
 71         /// <param name="pageCount"></param>
 72         /// <param name="order">id asc 或者 id desc</param>
 73         /// <param name="expressions"></param>
 74         /// <returns></returns>
 75         public List<T> SelectPage<T>(int pageIndex, int pageSize, ref int pageCount, string orderBy, params  Expression<Func<T, bool>>[] expressions) where T : new()
 76         {
 77 
 78             var tEntity = new T();
 79             var type = tEntity.GetType();
 80             string whereStr = string.Empty;
 81             foreach (var expression in expressions)
 82             {
 83                 if (expression.Body is BinaryExpression)
 84                 {
 85                     BinaryExpression be = ((BinaryExpression)expression.Body);
 86                     whereStr =" and " + Common.BinarExpressionProvider(be.Left, be.Right, be.NodeType);
 87                 }
 88             }
 89             string sql = string.Format("select * from {0} where 1=1  {1} order by {2}  LIMIT {3},{4} ", type.Name,  whereStr, orderBy, (pageIndex - 1) * pageSize, pageSize);
 90             string sqlCount = string.Format("select count(*) from {0} where 1=1  {1} order by {2}   ", type.Name,   whereStr, orderBy);
 91 
 92             var dt = GetDataTable(sql);
 93             pageCount = GetInt(sqlCount);
 94             var reval = Common.List<T>(dt);
 95             return reval;
 96         }
 97 
 98 
 99         /// <summary>
100         /// 创建类
101         /// </summary>
102         /// <param name="nameSpace">命名空间</param>
103         /// <param name="fullPath">生成类的存放物理目录</param>
104         /// <param name="tableNames">指定生成的表名,不填为生成所有表</param>
105         /// <returns>执行结果</returns>
106         public string CreateCalss(string nameSpace, string dirPath, params string[] tableNames)
107         {
108 
109             StringBuilder reval = new StringBuilder();
110             if (nameSpace == null)
111             {
112                 return "nameSpace不能为空";
113             }
114             if (dirPath == null)
115             {
116                 return "DirPath不能为空";
117             }
118             if (!System.IO.Directory.Exists(dirPath))
119             {
120                 return "找不到dicPath路径";
121             }
122 
123             string sql = "select name from sqlite_master where type='table'  order by name";
124             var dt = GetDataTable(sql);
125             if (dt == null || dt.Rows.Count == 0)
126             {
127                 throw new Exception("数据库没有可生成的表!");
128             }
129             else
130             {
131                 foreach (DataRow dr in dt.Rows)
132                 {
133                     string tableName = dr["name"].ToString();
134                     if (!tableName.Contains("_old") && tableName != "sqlite_sequence")
135                     {
136                         if (tableNames.Length == 0 || tableNames.Contains(tableName))
137                         {
138                             string classsql = string.Format("select  * from {0} Limit 1", tableName);
139                             CreateCalssBySql(nameSpace, dirPath, tableName, classsql);
140                             reval.AppendFormat("表【{0}】:创建成功!\r\n", tableName);
141                         }
142                     }
143                 }
144             }
145             return reval.ToString();
146         }
147         /// <summary>
148         /// 根据SQL创建类
149         /// </summary>
150         /// <param name="nameSpace">命名空间</param>
151         /// <param name="fullPath">生成类的存放物理目录</param>
152         /// <param name="tableNames">指定生成的表名,不填为生成所有表</param>
153         /// <param name="classsql">sql语句</param>
154         public bool CreateCalssBySql(string nameSpace, string dirPath, string tableName, string classsql)
155         {
156             DataTable classSource = GetDataTable(classsql);
157             string classString = ClassGenerating.DataTableToClass(classSource, tableName, nameSpace);
158 
159             string calssPath = string.Format("{0}\\{1}.cs", dirPath.TrimEnd('\\'), tableName);
160             if (!File.Exists(calssPath))
161             {
162                 FileInfo file = new FileInfo(calssPath);
163                 using (FileStream stream = file.Create())
164                 {
165                     using (StreamWriter writer = new StreamWriter(stream, Encoding.UTF8))
166                     {
167                         //写入字符串     
168                         writer.Write(classString);
169 
170                         //输出
171                         writer.Flush();
172                     }
173                 }
174 
175             }
176             System.IO.File.WriteAllText(calssPath, classString, Encoding.UTF8);
177             return true;
178         }
179 
180         /// <summary>
181         /// 插入
182         /// 用法:
183         /// Product p = new Product()
184         /// {
185         ///  category_id = 2,
186         ///  sku = "sku",
187         ///  title = "title"
188         /// };
189         /// e.Insert<Product>(p);
190         /// </summary>
191         /// <typeparam name="TEntity"></typeparam>
192         /// <param name="entity"></param>
193         /// <param name="isIdentity">主键是否为自增长,true可以不填,false必填</param>
194         /// <returns></returns>
195         public bool Insert<TEntity>(TEntity entity, bool isIdentity = true) where TEntity : class
196         {
197             Type type = entity.GetType();
198             var primaryKeyName = GetPrimaryKey(type);
199             List<SQLiteParameter> pars = new List<SQLiteParameter>();
200             //2.获得实体的属性集合 
201             PropertyInfo[] props = type.GetProperties();
202 
203             //实例化一个StringBuilder做字符串的拼接 
204             StringBuilder sb = new StringBuilder();
205 
206             sb.Append("insert into " + type.Name + " (");
207 
208             //3.遍历实体的属性集合 
209             foreach (PropertyInfo prop in props)
210             {
211                 //EntityState,@EntityKey
212                 if (isIdentity == false || (isIdentity && prop.Name != primaryKeyName))
213                 {
214                     //4.将属性的名字加入到字符串中 
215                     sb.Append(prop.Name + ",");
216                 }
217             }
218             //**去掉最后一个逗号 
219             sb.Remove(sb.Length - 1, 1);
220             sb.Append(" ) values(");
221 
222             //5.再次遍历,形成参数列表"(@xx,@xx@xx)"的形式 
223             foreach (PropertyInfo prop in props)
224             {
225                 //EntityState,@EntityKey
226                 if (isIdentity == false || (isIdentity && prop.Name != primaryKeyName))
227                 {
228                     sb.Append("@" + prop.Name + ",");
229                     object val = prop.GetValue(entity, null);
230                     if (val == null)
231                         val = DBNull.Value;
232                     pars.Add(new SQLiteParameter("@" + prop.Name, val));
233                 }
234             }
235             //**去掉最后一个逗号 
236             sb.Remove(sb.Length - 1, 1);
237             sb.Append(")");
238 
239             var sql = sb.ToString();
240             var addRowCount = ExecuteNonQuery(sql, pars.ToArray());
241             message = string.Format("{0}行受影响", addRowCount);
242             return addRowCount > 0;
243 
244         }
245 
246 
247         /// <summary>
248         /// 更新
249         /// 用法:
250         /// Update<ClassName>(new { name='小张',sex='男'},new {id=1})
251         /// </summary>
252         /// <typeparam name="TEntity">更新实体类型</typeparam>
253         public bool Update<TEntity>(object rowObj, object whereObj) where TEntity : class
254         {
255             if (rowObj == null) { message = "rowObj不能为空"; return false; };
256             if (whereObj == null) { message = "rowObj不能为空"; return false; };
257 
258             using (SQLiteHelper db = new SQLiteHelper(_connstr))
259             {
260                 Type type = typeof(TEntity);
261                 string sql = string.Format(" update {0} set ", type.Name);
262                 Dictionary<string, string> rows = Common.GetObjectToDictionary(rowObj);
263                 foreach (var r in rows)
264                 {
265                     sql += string.Format(" {0} =@{0}  ,", r.Key);
266                 }
267                 sql = sql.TrimEnd(',');
268                 sql += string.Format(" where  1=1  ");
269                 Dictionary<string, string> wheres = Common.GetObjectToDictionary(whereObj);
270                 foreach (var r in wheres)
271                 {
272                     sql += string.Format(" and {0} =@{0}", r.Key);
273                 }
274                 List<SQLiteParameter> parsList = new List<SQLiteParameter>();
275                 parsList.AddRange(rows.Select(c => new SQLiteParameter("@" + c.Key, c.Value)));
276                 parsList.AddRange(wheres.Select(c => new SQLiteParameter("@" + c.Key, c.Value)));
277                 var updateRowCount = db.ExecuteNonQuery(sql, parsList.ToArray());
278                 message = string.Format("{0}行受影响", updateRowCount);
279                 return updateRowCount > 0;
280             }
281         }
282 
283         /// <summary>
284         /// 批量删除
285         /// 用法:
286         /// Delete<T>(new int[]{1,2,3})
287         /// 或者
288         /// Delete<T>(3)
289         /// </summary>
290         /// <param name="oc"></param>
291         /// <param name="whereIn">in的集合</param>
292         /// <param name="whereIn">主键为实体的第一个属性</param>
293         public bool Delete<TEntity>(params dynamic[] whereIn)
294         {
295             try
296             {
297                 using (SQLiteHelper db = new SQLiteHelper(_connstr))
298                 {
299 
300                     Type type = typeof(TEntity);
301                     string key = type.FullName;
302                     bool isSuccess = false;
303                     if (whereIn != null && whereIn.Length > 0)
304                     {
305                         string sql = string.Format("delete from {0} where {1} in ({2})", type.Name, GetPrimaryKey(type), Common.ToJoinSqlInVal(whereIn));
306                         int deleteRowCount = db.ExecuteNonQuery(sql);
307                         message = string.Format("{0}行受影响", deleteRowCount);
308                         isSuccess = deleteRowCount > 0;
309                     }
310                     return isSuccess;
311                 }
312             }
313             catch (Exception ex)
314             {
315                 throw ex;
316             }
317         }
318 
319 
320 
321         /// <summary>
322         /// 该方法执行传入的增删改SQL语句
323         /// </summary>
324         /// <param name="sql"></param>
325         /// <returns>返回影响行数</returns>
326         public int ExecuteNonQuery(string sql, params SQLiteParameter[] pars)
327         {
328             using (SQLiteHelper db = new SQLiteHelper(_connstr))
329             {
330                 return db.ExecuteNonQuery(sql, pars);
331             }
332         }
333 
334         /// <summary>
335         /// 反回datatable
336         /// </summary>
337         /// <param name="sql"></param>
338         /// <returns></returns>
339         public DataTable GetDataTable(string sql, params SQLiteParameter[] pars)
340         {
341             using (SQLiteHelper db = new SQLiteHelper(_connstr))
342             {
343                 return db.ExecuteQuery(sql, pars);
344             }
345         }
346 
347         /// <summary>
348         /// 反回第一行第一列
349         /// </summary>
350         /// <param name="sql"></param>
351         /// <returns></returns>
352         public string GetString(string sql, params SQLiteParameter[] pars)
353         {
354             using (SQLiteHelper db = new SQLiteHelper(_connstr))
355             {
356                 return db.GetString(sql, pars);
357             }
358         }
359         /// <summary>
360         /// 反回第一行第一列
361         /// </summary>
362         /// <param name="sql"></param>
363         /// <returns></returns>
364         public int GetInt(string sql, params SQLiteParameter[] pars)
365         {
366             using (SQLiteHelper db = new SQLiteHelper(_connstr))
367             {
368                 return db.GetInt(sql, pars);
369             }
370         }
371 
372 
373         /// <summary>
374         /// 获取主键
375         /// </summary>
376         /// <param name="type"></param>
377         /// <param name="key"></param>
378         /// <returns></returns>
379         private string GetPrimaryKey(Type type)
380         {
381             return type.GetProperties()[0].Name;
382         }
383     }
Easyliter

 

posted @ 2015-07-16 15:20  自然去留  阅读(169)  评论(0)    收藏  举报