Winform/Csharp中连接Mysql并执行指定sql,查询结果通过反射映射为对象的List

生活中,最使人疲惫的往往不是道路的遥远,而是心中的郁闷;最使人痛苦的往往不是生活的不幸,而是希望的破灭;最使人颓废的往往不是前途的坎坷,而是自信的丧失;最使人绝望的往往不是挫折的打击,而是心灵的死亡。所以我们要有自己的梦想,让梦想的星光指引着我们走出落漠,走出惆怅,带着我们走进自己的理想。

导读:本篇文章讲解 Winform/Csharp中连接Mysql并执行指定sql,查询结果通过反射映射为对象的List,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

场景

Winform中连接Mysql8并查询表中数据进行显示:

Winform中连接Mysql8并查询表中数据进行显示_winform连接mysql_霸道流氓气质的博客-CSDN博客

在上面连接Mysql的基础上,如果需要连接Mysql并执行指定的sql语句,并且将

查询结果转换为对象的list数据。

sql语句执行的查询结果

Winform/Csharp中连接Mysql并执行指定sql,查询结果通过反射映射为对象的List 

查询并映射后的结果

Winform/Csharp中连接Mysql并执行指定sql,查询结果通过反射映射为对象的List

 

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

1、代码比较简单,直接附代码

        private void button3_Click(object sender, EventArgs e)
        {
            connetStr = "server= 127.0.0.1;UserId=root;password=123;database=test"; 
            mySqlConnection = new MySqlConnection(connetStr);
            try
            {
                mySqlConnection.Open(); //连接数据库
                MessageBox.Show("数据库连接成功", "提示", MessageBoxButtons.OK);
                string searchStr = "SELECT mail.car_number,mail.driver_number ,driver.name as driver_name FROM bus_mail_list mail LEFT JOIN bus_driver_info driver on mail.driver_number = driver.account_number";
                DataTable dataTable = getMySqlRead(searchStr);
                mailList = DataTableToList<BusMailList>(dataTable);
                mailList.ForEach(mail =>
                {
                    Console.WriteLine(mail.driver_name + mail.driver_number);
                });
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.Message, "提示", MessageBoxButtons.OK);     //显示错误信息
            }         
        }

2、其中连接数据的字符串中配置ip、用户名密码等信息。

需要提前声明一些变量

        List<BusMailList> mailList = new List<BusMailList>();

        string connetStr = String.Empty;

        MySqlConnection mySqlConnection = null;

然后新建要反射后的对象

    public class BusMailList
    {
        public long binding_time { get; set; }
        public string car_number { get; set; }
        public string driver_name { get; set; }
        public string driver_number { get; set; }
        public int id { get; set; }
        public long update_time { get; set; }

    }

注意这里要与数据库查询结果字段对应一致。

查询结果只需要三个字段,实体对象可以有多个属性,但是实体对象的三个属性需要与查询结果的字段一致。

然后注意的是,这里实体对象没有重写构造方法,如果重写了构造方法的话,必须再声明无参的构造方法。

举个其他实体对象的例子

    class CarInfoVo
    {
        public string car_Num { get; set; }
        public string car_Type { get; set; }

        public CarInfoVo()
        {

        }

        public CarInfoVo(string carNum, string carType)
        {
            car_Num = carNum;
            car_Type = carType;
        }
    }

其中用到的两个方法是创建MysqlDataReader对象的getMySqlRead方法

        public DataTable getMySqlRead(string M_str_sqlstr)
        {  
            MySqlCommand mysqlcom = new MySqlCommand(M_str_sqlstr, mySqlConnection);
            MySqlDataAdapter mda = new MySqlDataAdapter(mysqlcom);
            DataTable dt = new DataTable();
            mda.Fill(dt);
            mySqlConnection.Close();
            return dt;
        }

另一个是利用反射将DataTabel转换为对象list的DataTableToList

        public List<T> DataTableToList<T>(DataTable dt)
        {
            //确认参数有效
            if (dt == null)
                return null;

            List<T> list = new List<T>();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                //创建泛型对象
                T _t = Activator.CreateInstance<T>();
                //获取对象所有属性
                PropertyInfo[] propertyInfo = _t.GetType().GetProperties();
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    foreach (PropertyInfo info in propertyInfo)
                    {
                        //属性名称和列名相同时赋值
                        if (dt.Columns[j].ColumnName.ToUpper().Equals(info.Name.ToUpper()))
                        {
                            if (dt.Rows[i][j] != DBNull.Value)
                            {
                                info.SetValue(_t, dt.Rows[i][j], null);
                            }
                            else
                            {
                                info.SetValue(_t, null, null);
                            }
                            break;
                        }
                    }
                }
                list.Add(_t);
            }
            return list;
     }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135807.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!