using JiangSu.Models;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SQLite;
using System.Linq;
using System.Reflection;
using System.Web;
namespace JiangSu.cs
{
public class ModelDAL
{
///
/// 获取参数列表
///
public static SQLiteParameter[] GetParams(string sql, T t)
{
List list = new List();
Type tType = typeof(T);
BindingFlags flags = BindingFlags.Public | BindingFlags.IgnoreCase | BindingFlags.Instance;
int start = sql.IndexOf("@");
while (start != -1)
{
int end = sql.IndexOf(",", start);
if (end == -1) end = sql.IndexOf(")", start);
if (end == -1) end = sql.IndexOf(" ", start);
if (end == -1) end = sql.Length;
string name = sql.Substring(start + 1, end - start - 1);
PropertyInfo pi = tType.GetProperty(name, flags);
if (pi != null)
{
object value = pi.GetValue(t, null);
SQLiteParameter dp = new SQLiteParameter("@" + name, value);
list.Add(dp);
}
start = sql.IndexOf("@", end);
}
return list.ToArray();
}
public static List SelectByPage(string name, int pageSize = 10, int pageIndex = 1)
{
bool flag = string.IsNullOrWhiteSpace(name);
string sql = string.Format("select * from model {0} order by id limit {1} offset {2}", flag ? "" : "where upper(name) like @name", pageSize, pageSize * (pageIndex - 1));
DataTable dt = flag ? SQLiteHelper.GetDataTable(sql) : SQLiteHelper.GetDataTable(sql, new SQLiteParameter("@name", "%" + name.Trim().ToUpper() + "%"));
if (null == dt || dt.Rows.Count == 0)
{
return null;
}
List list = ModelHandler.FillModel(dt);
return list;
}
public static Model SelectById(long id)
{
string sql = "select * from model where id = @id";
SQLiteParameter param = new SQLiteParameter("@id");
param.Value = id;
DataTable dt = SQLiteHelper.GetDataTable(sql, param);
if (null == dt || dt.Rows.Count == 0)
{
return null;
}
List list = ModelHandler.FillModel(dt);
return null == list || list.Count == 0 ? null : list[0];
}
public static int DeleteByIds(List ids)
{
string str = string.Join(",", ids.ToArray());
string sql = string.Format("delete from model where id in ({0})", str);
return SQLiteHelper.ExecuteNonQuery(sql);
}
public static int Insert(Model model)
{
string sql = "insert into model (name, json) values (@name, @json);select last_insert_rowid();";
SQLiteParameter[] sqlParams = GetParams(sql, model);
//return SQLiteHelper.ExecuteNonQuery(sql, sqlParams);
object obj = SQLiteHelper.ExecuteScalar(sql, sqlParams);
return null == obj ? 0 : Convert.ToInt32(obj);
}
public static int UpdateById(Model model)
{
string sql = "update model set name = @name, json = @json where id = @id";
SQLiteParameter[] sqlParams = GetParams(sql, model);
return SQLiteHelper.ExecuteNonQuery(sql, sqlParams);
}
}
}