using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; namespace Face.Services.DBUtility.Common { public class DALHelper where TEntity : class, new() { private string databasetablename; //数据库表名前缀 //private DbConfigsInfo confInfi; public DALHelper() { databasetablename = "TBL_UTS_Manage"; } public DALHelper(string _databaseprefix) { databasetablename = _databaseprefix; } /// /// 是否存在该记录 /// public bool Exists(TEntity entity, string strField, object keyValue) { StringBuilder strSql = new StringBuilder(); strSql.Append("select count(1) from " + databasetablename); strSql.Append(" where " + strField + "=@keyValue "); MySqlParameter[] parameters = { new MySqlParameter("@keyValue",keyValue) }; return DbHelperMySQL.Exists(strSql.ToString(), parameters); } /// /// 得到最大ID /// public int GetMaxId(TEntity entity, string strField) { return DbHelperMySQL.GetMaxID(strField, databasetablename); } //public bool Add(TEntity entity) //{ // StringBuilder strSql = new StringBuilder(); // strSql.Append("insert into " + databasetablename + "("); // PropertyInfo[] propertys = entity.GetType().GetProperties();// 获得此模型的公共属性 // List parameters = new List(); // foreach (PropertyInfo pi in propertys) // { // if (!pi.CanWrite) continue; // strSql.Append(pi.Name + ","); // strSql.Append(" values ("); // } // strSql.Append(" ) values ("); // foreach (PropertyInfo pi in propertys) // { // if (!pi.CanWrite) continue; // strSql.Append(pi.Name + "@,"); // parameters.Add(new SqlParameter("@" + pi.Name, pi.GetValue(entity))); // } // strSql.Append(");select @@IDENTITY"); // int rows = DbHelperMySQL.ExecuteSql(strSql.ToString(), parameters.ToArray()); // if (rows > 0) // { // return true; // } // else // { // return false; // } //} ///// ///// 修改一个实体数据 ///// ///// ///// ///// ///// //public bool Update(TEntity entity, string strField, object keyValue) //{ // StringBuilder strSql = new StringBuilder(); // strSql.Append("update " + databasetablename + " set "); // PropertyInfo[] propertys = entity.GetType().GetProperties();// 获得此模型的公共属性 // List parameters = new List(); // foreach (PropertyInfo pi in propertys) // { // if (!pi.CanWrite) continue; // strSql.Append(pi.Name + "=@" + pi.Name + ","); // parameters.Add(new SqlParameter("@" + pi.Name, pi.GetValue(entity))); // } // strSql.Append(" where " + strField + "=@strValue"); // parameters.Add(new MySqlParameter("@strValue", keyValue)); // int rows = DbHelperMySQL.ExecuteSql(strSql.ToString(), parameters.ToArray()); // if (rows > 0) // { // return true; // } // else // { // return false; // } //} /// /// 修改一列数据 /// public int UpdateField(TEntity entity, string strField, object strValue, string strWhere) { StringBuilder strSql = new StringBuilder(); strSql.Append("update " + databasetablename); strSql.Append(" set " + strField + "=@strValue"); if (!string.IsNullOrEmpty(strWhere)) { strSql.Append(" where " + strWhere); } SqlParameter[] parameters = { new SqlParameter("@strValue",strValue) }; return DbHelperMySQL.ExecuteSql(strSql.ToString()); } /// /// 删除一条数据 /// public bool Delete(TEntity entity, string strField, object keyValue) { StringBuilder strSql = new StringBuilder(); strSql.Append("delete from " + databasetablename); strSql.Append(" where " + strField + "=@keyValue "); MySqlParameter[] parameters = { new MySqlParameter("@keyValue",keyValue) }; int rows = DbHelperMySQL.ExecuteSql(strSql.ToString(), parameters); if (rows > 0) { return true; } else { return false; } } /// /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对MySqlDataReader进行Close ) /// /// 查询语句 /// MySqlDataReader //public static void ExecuteReader(string strSQL, Action func) //{ // try // { // using (MySqlConnection connection = new MySqlConnection(connectionString)) // { // using (MySqlCommand cmd = new MySqlCommand(strSQL, connection)) // { // connection.Open(); // using (MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)) // { // func(myReader); // } // } // } // } // catch (MySqlException e) // { // throw e; // } //} /// /// 得到一个对象实体 /// /// /// public TEntity GetModel(TEntity entity, string strField, string keyValue) { StringBuilder strSql = new StringBuilder(); strSql.Append("select * from " + databasetablename); strSql.Append(" where " + strField + "=@keyValue "); strSql.Append(" LIMIT 0,1;"); MySqlParameter[] parameters = { new MySqlParameter("@keyValue",keyValue) }; DataSet ds = DbHelperMySQL.Query(strSql.ToString(), parameters); if (ds.Tables[0].Rows.Count > 0) { return DataRowToModel(entity, ds.Tables[0]); } else { return null; } } public List GetList(string strWhere = null) { StringBuilder strSql = new StringBuilder(); strSql.Append("select * from " + databasetablename); if (!string.IsNullOrEmpty(strWhere)) { strSql.Append(" where " + strWhere); } //strSql.Append(" LIMIT 0,1;"); TEntity entity = new TEntity(); DataSet ds = DbHelperMySQL.Query(strSql.ToString()); if (ds.Tables[0].Rows.Count > 0) { return DataRowToModels(entity, ds.Tables[0]); } else { return null; } } /// /// 将DataTable转换得到一个对象实体 /// /// /// /// public TEntity DataRowToModel(TEntity model, DataTable dt) { if (dt.Rows.Count > 0) { TEntity t = new TEntity(); PropertyInfo[] propertys = t.GetType().GetProperties();// 获得此模型的公共属性 foreach (PropertyInfo pi in propertys) { if (dt.Columns.Contains(pi.Name)) { if (!pi.CanWrite) continue; var value = dt.Rows[0][pi.Name]; if (value != DBNull.Value) { switch (pi.PropertyType.FullName) { case "System.Decimal": pi.SetValue(t, decimal.Parse(value.ToString()), null); break; case "System.String": pi.SetValue(t, value.ToString(), null); break; case "System.Single": pi.SetValue(t, float.Parse(value.ToString()), null); break; case "System.Double": pi.SetValue(t, double.Parse(value.ToString()), null); break; case "System.Int32": pi.SetValue(t, int.Parse(value.ToString()), null); break; case "System.DateTime": pi.SetValue(t, DateTime.Parse(value.ToString()), null); break; case "System.Boolean": pi.SetValue(t, bool.Parse(value.ToString()), null); break; default: pi.SetValue(t, value, null); break; } } } } return t; } else { return null; } } /// /// 将DataTable转换得到一个对象实体集合 /// /// /// /// public List DataRowToModels(TEntity model, DataTable dt) { List ts = new List();// 定义集合 foreach (DataRow dr in dt.Rows) { TEntity t = new TEntity(); PropertyInfo[] propertys = t.GetType().GetProperties();// 获得此模型的公共属性 foreach (PropertyInfo pi in propertys) { if (dt.Columns.Contains(pi.Name)) { if (!pi.CanWrite) continue; var value = dr[pi.Name]; if (value != DBNull.Value) { switch (pi.PropertyType.FullName) { case "System.Decimal": pi.SetValue(t, decimal.Parse(value.ToString()), null); break; case "System.String": pi.SetValue(t, value.ToString(), null); break; case "System.Single": pi.SetValue(t, float.Parse(value.ToString()), null); break; case "System.Double": pi.SetValue(t, double.Parse(value.ToString()), null); break; case "System.Int32": pi.SetValue(t, int.Parse(value.ToString()), null); break; case "System.DateTime": pi.SetValue(t, DateTime.Parse(value.ToString()), null); break; case "System.Boolean": pi.SetValue(t, bool.Parse(value.ToString()), null); break; default: pi.SetValue(t, value, null); break; } } } } ts.Add(t); } return ts; } } }