2018-06-05

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;

public class MysqlManager
{
string ip = "127.0.0.1"; //本机地址
string username = "root";
string password = "123456";
string dbName = "qikuedu";

MySqlConnection connet;
MySqlCommand command;
public MysqlManager()
{
    connet = new MySqlConnection();
    connet.ConnectionString = "server=" + ip + ";user id=" + username + ";password=" + password + ";database=" + dbName;
    connet.Open();
    Console.WriteLine("打开数据库成功");

    command = connet.CreateCommand();


    ////创建的脚本  产生空表格
    //Dictionary skills = new Dictionary();
    //skills.Add("id", "int primary key");
    //skills.Add("name", "varchar(10)");
    //skills.Add("attack", "int");
    //skills.Add("ranges", "float");
    ////根据字典创建表
    //CreateTable("Skill", skills);  //Bill表格的名字,不区分大小写


    //增加信息
    //InsertInto("skill");

    //删除信息
    //DeletFrom("skill");

    //改信息
    //UpdateSet("skill");

    //查信息
    //SelectFrom("skill");

//------------------------------------------------------------------------
User user = new User();
user.id = 1;
user.username = "[email protected]";
user.nickname = "小马哥";
user.password = "123456";

    //创建空表格
    //CreateTable();
    //插入数值
    //InsertInto(user);
    //删除数据
    //DeleteFrom(1);
    //改
    //查
    List users = SelectFrom();
}

//CreateTable(T t)where T:class,new()   冒号后说明T必须是类 new是意思必须有构造函数  
//CreateTable(T t)where T:struck   冒号说明T必须是值类型 值类型不能new
//CreateTable(T t)where T:User,new() 说明参数必须是User类

//CreateTable(user); 上方法
//void CreateTable(T t) where T : class  等同创建  下方法

void CreateTable() where T :class
{
    Type type = typeof(T);  //大写T代表类,小写t代表对象
    string tableName = type.Name; //这是类的名字,就是以后生成表格的名字
    System.Reflection.FieldInfo[] fileds = type.GetFields(); //这里面是User里的几个字段名字
    string sql = "create table " + tableName + " (";
    foreach (var item in fileds)
    {

        //string dbType = "";
        //if (item.FieldType.Name=="String")   //item.Name是列名字,item.FieldType.Name是对应列名字的类型
        //{
        //    dbType = "Text";   //因为没有string类型,所以需要强转
        //}
        //if (item.FieldType.Name=="Int")
        //{
        //    dbType = "Int";
        //}
        //if (item.FieldType.Name == "Float")
        //{
        //    dbType = "Float";
        //}
        if (item.Name == "id")
            sql += item.Name + " " + CS2DB(item.FieldType) + " primary key auto_increment,"; //设置k键
        else
            sql += item.Name + " " + CS2DB(item.FieldType) + ",";
    }
    sql = sql.TrimEnd(',')+")";
    ExcuteSql(sql);
}
string CS2DB(Type type)
{
    string dbType = "";
    if (type.Name == "String")
    {
        dbType = "Text";
    }
    else if (type.Name == "Int32")
    {
        dbType = "Int";
    }
    else if (type.Name == "Float")
    {
        dbType = "Float";
    }
    return dbType;
}
//插入数值
void InsertInto(T t) where T:class
{
    Type type = typeof(T);  
    string tableName = type.Name;
    System.Reflection.FieldInfo[] fileds = type.GetFields(); 
    string sql = "insert into " + tableName + " values(";
    foreach (var item in fileds)
    {           
            string value = item.GetValue(t).ToString();
            sql += "'"+value + "' ,";         
    }
    sql = sql.TrimEnd(',') + ")";
    ExcuteSql(sql);
}
//删除
void DeleteFrom(int id)
{
    string tableName = typeof(T).Name;
    string sql = "delete from " + tableName + " " + "where id = " + id;
    ExcuteSql(sql);
}
//查
List SelectFrom()where T:class,new()
{
    Type type = typeof(T);
    string tableName = type.Name;
    string sql = "select * from " + tableName;

    command.CommandText = sql;
    MySqlDataReader reader = command.ExecuteReader(); //以阅读器查询

    List array = new List();
    while (reader.Read())  //只要有数据就可以读
    {
        T t = new T();  //一个人就是一个t
        int count = reader.FieldCount;  //获取表格有几列
        for (int i = 0; i < count; i++)
        {
            string key = reader.GetName(i);//列名
            object value = reader.GetValue(i);//列值

            type.GetField(key).SetValue(t,value); //获取表格数值,把数值填充到t,最后返回t
            //type.GetField("username").SetValue(t, "[email protected]");
            //type.GetField(key).SetValue(t,value);

            Console.WriteLine(key + ":" + value);
        }
        array.Add(t);
    }
    return array;
}

//--------------------------------------------------------------------------
void CreateTable(string tabelName, Dictionary infos)
{
    string sql = "create table " + tabelName + "(";  //表的名字
    foreach (var item in infos)
    {
        sql += item.Key + " " + item.Value + ",";   //列名+列类型
    }
    sql = sql.TrimEnd(',') + ");";
    ExcuteSql(sql);
}

void ExcuteSql(string sql)
{
    Console.WriteLine("sql->" + sql);
    command.CommandText = sql;
    command.ExecuteNonQuery();  //数据库
}
//增
void InsertInto(string tableName)
{
    string sql = "insert into " + tableName + " " + "values(1,'暴风雪',10,10)";
    ExcuteSql(sql);
}


//删
void DeletFrom(string tableName)
{
    string sql = "delete from " + tableName + " " + "where id = 1";  //是通过索引删除全部
    ExcuteSql(sql);
}
//改
void UpdateSet(string tableName)
{
    string sql = "update " + tableName + " " + "set name = '无间' where id = 1"; //通过索引查询,将名字更改
    ExcuteSql(sql);
}
//查
void SelectFrom(string tableName)
{
    string sql = "select * from " + tableName;

    command.CommandText = sql;
    MySqlDataReader reader = command.ExecuteReader(); //以阅读器查询


    while (reader.Read())  //只要有数据就可以读
    {
        int count = reader.FieldCount;  //获取表格有几列
        for (int i = 0; i < count; i++)
        {
            string key = reader.GetName(i);//列名
            object value = reader.GetValue(i);//列值
            Console.WriteLine(key + ":" + value);
        }
    }
}

}

你可能感兴趣的:(2018-06-05)