数据库管理器学习记录

public class MySqlManager
{
    //数据库连接对象
    private MySqlConnection _conn;
    //数据库名字
    private string _dbName = "test";
    //数据库源
    private string _dataSource = "127.0.0.1";
    //用户名
    private string _userid = "root";
    //密码
    private string _pws = "123456";


    //连接
    public void Connect()
    {
        string str = string.Format("Server = {0};UserID = {1};Password ={2};Database = {3}",_dataSource,_userid,_pws,_dbName);
        _conn = new MySqlConnection(str);
    }

    //执行非查询命令
    public void ExecNonQuery(string sql)
    {
        MySqlCommand command = new MySqlCommand(sql, _conn);

        _conn.Open();
        command.ExecuteNonQuery();
        command.Dispose();
        _conn.Close();
    }

    //执行查询命令
    public List<T> ExecQuery<T>(string sql)
    {
        List<T> objList = new List<T>();
        //创建一个mysql命令
        MySqlCommand command = new MySqlCommand(sql, _conn);

        //打开数据库
        _conn.Open();

        MySqlDataReader reader = null;
        //获取数据库读取器
        reader = command.ExecuteReader();

        //开始读
        while(reader.Read())
        {
            T obj = Activator.CreateInstance<T>();
            FieldInfo[] fields = typeof(T).GetFields();

            for (int i = 0; i < reader.FieldCount; i++)
            {
                ReadField<T>(obj, fields[i], reader, i);
            }
            objList.Add(obj);
        }

        reader.Close();
        _conn.Close();
        command.Dispose();

        return objList;
    }

    public Dictionary<int,T> ExecQueryDic<T> (string sql)
    {
        Dictionary<int, T> objList = new Dictionary<int, T>();

        MySqlCommand command = new MySqlCommand(sql, _conn);
        MySqlDataReader reader = null;

        _conn.Open();

        reader = command.ExecuteReader();

        while(reader.Read())
        {
            T obj = Activator.CreateInstance<T>();
            FieldInfo[] fields = typeof(T).GetFields();

            for (int i = 0; i < fields.Length; i++)
            {
                ReadField<T>(obj, fields[i], reader,i);
            }

            FieldInfo fieldInfo = obj.GetType().GetField("id");
            int id = (int)fieldInfo.GetValue(obj);

            if(!objList.ContainsKey(id))
            {
                objList.Add(id, obj);
            } 
        }

        reader.Close();
        _conn.Close();
        command.Dispose();

        return objList;
    }

    //从数据库中读取数据 并赋值
    private void ReadField<T>(T obj,FieldInfo fieldInfo,MySqlDataReader reader,int ordinal)
    {
        Type type = fieldInfo.FieldType;
        System.Object value = null;

        if (type == typeof(int))
            value = reader.GetFieldValue<int>(ordinal);
        else if (type == typeof(byte))
            value = reader.GetFieldValue<byte>(ordinal);
        else if (type == typeof(uint))
            value = reader.GetFieldValue<uint>(ordinal);
        else if (type == typeof(string))
            value = reader.GetFieldValue<string>(ordinal);
        else if (type == typeof(float))
            value = reader.GetFieldValue<float>(ordinal);

        fieldInfo.SetValue(obj, value);

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值