场景
Winform中连接Mysql8并查询表中数据进行显示:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/120395988
在上面连接Mysql的基础上,如果需要连接Mysql并执行指定的sql语句,并且将
查询结果转换为对象的list数据。
sql语句执行的查询结果
查询并映射后的结果
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
实现
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; }
标签:string,get,List,Csharp,driver,sql,mail,dt,public From: https://www.cnblogs.com/badaoliumangqizhi/p/17253179.html