using System;
using System.Collections.Generic;
using System.Configuration;
using System.Collections;
using System.Data;
using System.Data.OleDb;
using System.Reflection;
namespace website
{
    public class db
    {
        public static string ConnStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + AppDomain.CurrentDomain.BaseDirectory + "App_Data\\BaseDB.mdb;";
        // public static string ConnStr = db.Properties.Settings.Default.my_soft_oledbConn;
        //打开数据库链接
        public static OleDbConnection Open_Conn(string ConnStr)
        {
            OleDbConnection Conn = new OleDbConnection(ConnStr);
            Conn.Open();
            return Conn;
        }
        //关闭数据库链接
        public static void Close_Conn(OleDbConnection Conn)
        {
            if (Conn != null)
            {
                Conn.Close();
                Conn.Dispose();
            }
            GC.Collect();
        }
        //运行OleDb语句
        public static int Run_SQL(string sql)
        {
            return Run_SQL(sql, ConnStr);
        }
        public static int Run_SQL(string SQL, string ConnStr)
        {
            OleDbConnection Conn = Open_Conn(ConnStr);
            OleDbCommand Cmd = Create_Cmd(SQL, Conn);
            try
            {
                int result_count = Cmd.ExecuteNonQuery();
                Close_Conn(Conn);
                return result_count;
            }
            catch
            {
                Close_Conn(Conn);
                return 0;
            }
        }
        // 生成Command对象
        public static OleDbCommand Create_Cmd(string SQL, OleDbConnection Conn)
        {
            OleDbCommand Cmd = new OleDbCommand(SQL, Conn);
            return Cmd;
        }
        // 运行OleDb语句返回 DataTable
        public static DataTable Get_DataTable(string SQL, string ConnStr, string Table_name)
        {
            OleDbDataAdapter Da = Get_Adapter(SQL, ConnStr);
            DataTable dt = new DataTable(Table_name);
            Da.Fill(dt);
            return dt;
        }
        // 运行OleDb语句返回 OleDbDataReader对象
        public static OleDbDataReader Get_Reader(string SQL, string ConnStr)
        {
            OleDbConnection Conn = Open_Conn(ConnStr);
            OleDbCommand Cmd = Create_Cmd(SQL, Conn);
            OleDbDataReader Dr;
            try
            {
                Dr = Cmd.ExecuteReader(CommandBehavior.Default);
            }
            catch
            {
                throw new Exception(SQL);
            }
            Close_Conn(Conn);
            return Dr;
        }
        // 运行OleDb语句返回 OleDbDataAdapter对象
        public static OleDbDataAdapter Get_Adapter(string SQL, string ConnStr)
        {
            OleDbConnection Conn = Open_Conn(ConnStr);
            OleDbDataAdapter Da = new OleDbDataAdapter(SQL, Conn);
            return Da;
        }
        // 运行OleDb语句,返回DataSet对象
        public static DataSet getds(string sql)
        {
            DataSet ds = new DataSet();
            Get_DataSet(sql, ConnStr, ds);
            return ds;
        }
        public static DataSet Get_DataSet(string SQL, string ConnStr, DataSet Ds)
        {
            OleDbDataAdapter Da = Get_Adapter(SQL, ConnStr);
            try
            {
                Da.Fill(Ds);
            }
            catch (Exception Err)
            {
                throw Err;
            }
            return Ds;
        }
        // 运行OleDb语句,返回DataSet对象
        public static DataSet Get_DataSet(string SQL, string ConnStr, DataSet Ds, string tablename)
        {
            OleDbDataAdapter Da = Get_Adapter(SQL, ConnStr);
            try
            {
                Da.Fill(Ds, tablename);
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
            return Ds;
        }
        // 运行OleDb语句,返回DataSet对象,将数据进行了分页
        public static DataSet Get_DataSet(string SQL, string ConnStr, DataSet Ds, int StartIndex, int PageSize, string tablename)
        {
            OleDbConnection Conn = Open_Conn(ConnStr);
            OleDbDataAdapter Da = Get_Adapter(SQL, ConnStr);
            try
            {
                Da.Fill(Ds, StartIndex, PageSize, tablename);
            }
            catch (Exception Ex)
            {
                throw Ex;
            }
            Close_Conn(Conn);
            return Ds;
        }
        // 返回OleDb语句执行结果的第一行第一列
        public static string Get_Row1_Col1_Value(string SQL, string ConnStr)
        {
            OleDbConnection Conn = Open_Conn(ConnStr);
            string result;
            OleDbDataReader Dr;
            try
            {
                Dr = Create_Cmd(SQL, Conn).ExecuteReader();
                if (Dr.Read())
                {
                    result = Dr[0].ToString();
                    Dr.Close();
                }
                else
                {
                    result = "";
                    Dr.Close();
                }
            }
            catch
            {
                throw new Exception(SQL);
            }
            Close_Conn(Conn);
            return result;
        }
        /// <summary>
        /// List转换成DataSet
        /// </summary>
        /// <typeparam name="T">类型</typeparam>
        /// <param name="list">将要转换的List</param>
        /// <returns></returns>
        public DataSet ConvertToDataSet<T>(IList<T> list)
        {
            if (list == null || list.Count <= 0)
            {
                return null;
            }
            DataSet ds = new DataSet();
            DataTable dt = new DataTable(typeof(T).Name);
            DataColumn column;
            DataRow row;
            System.Reflection.PropertyInfo[] myPropertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);
            foreach (T t in list)
            {
                if (t == null)
                {
                    continue;
                }
                row = dt.NewRow();
                for (int i = 0, j = myPropertyInfo.Length; i < j; i++)
                {
                    System.Reflection.PropertyInfo pi = myPropertyInfo[i];
                    string name = pi.Name;
                    if (dt.Columns[name] == null)
                    {
                        column = new DataColumn(name, pi.PropertyType);
                        dt.Columns.Add(column);
                    }
                    row[name] = pi.GetValue(t, null);
                }
                dt.Rows.Add(row);
            }
            ds.Tables.Add(dt);
            return ds;
        }
        #region DataSetToObjList
        /// <summary>
        /// DataSet数据转成Entity
        /// </summary>
        /// <typeparam name="T">Entity</typeparam>
        /// <param name="ds">数据集</param>
        /// <param name="tbName">表名</param>
        /// <returns></returns>
        public static List<T> DataSetToObjList<T>(DataSet ds, String tbName)
            where T : new()
        {
            List<T> list = new List<T>();
            PropertyInfo[] propinfos = null;
            foreach (DataTable dt in ds.Tables)
            {
                if (dt.TableName.Equals(tbName))
                {
                    foreach (DataRow dr in dt.Rows)
                    {
                        T entity = new T();
                        //初始化propertyinfo
                        if (propinfos == null)
                        {
                            Type objtype = entity.GetType();
                            propinfos = objtype.GetProperties();
                        }
                        //填充entity类的属性
                        foreach (PropertyInfo propinfo in propinfos)
                        {
                            foreach (DataColumn dc in dt.Columns)
                            {
                                if (dc.ColumnName.Equals(propinfo.Name))
                                {
                                    string v = null;
                                    v = dr[dc.ColumnName].ToString();
                                    if (v != null)
                                    {
                                        propinfo.SetValue(entity, Convert.ChangeType(v, propinfo.PropertyType), null);
                                        break;
                                    }
                                }
                            }
                        }
                        list.Add(entity);
                    }
                }
            }
            return list;
        }
        #endregion
        #region DataSetToObjList
        /// <summary>
        /// DataSet数据转成Entity
        /// </summary>
        /// <typeparam name="T">Entity</typeparam>
        /// <param name="ds">数据集</param>
        /// <param name="tbName">表名</param>
        /// <returns></returns>
        public static T DataSetToObj<T>(DataSet ds, String tbName)
            where T : new()
        {
            PropertyInfo[] propinfos = null;
            T entity = new T();
            if (ds.Tables[0].Rows.Count > 0)
            {
                DataTable dt = ds.Tables[0];
                //初始化propertyinfo
                if (propinfos == null)
                {
                    Type objtype = entity.GetType();
                    propinfos = objtype.GetProperties();
                }
                //填充entity类的属性
                DataRow dr = dt.Rows[0];
                foreach (PropertyInfo propinfo in propinfos)
                {
                    foreach (DataColumn dc in dt.Columns)
                    {
                        if (dc.ColumnName.Equals(propinfo.Name))
                        {
                            string v = null;
                            v = dr[dc.ColumnName].ToString();
                            if (v != null)
                            {
                                propinfo.SetValue(entity, Convert.ChangeType(v, propinfo.PropertyType), null);
                                break;
                            }
                        }
                    }
                }
            }
            return entity;
        }
        #endregion
    }
}
posted on 2012-03-15 13:19  kitea  阅读(433)  评论(1)    收藏  举报