DataSet是数据集,DataTable是数据表,DataSet存储多个DataTable。DataSet和DataTable像是专门存储数据的一个容器,在你查询数据库得到一些结果时可以存在里面。
DataSet功能强大有浏览、排序、搜索、过滤、处理分级数据、缓存更改等功能,还可以与XML数据互换。DataSet中可包括多个DataTable,可将多个查询结构存到一个DataSet中,方便操作 ADO.NET开发人员为方便数据处理开发出来的,是数据的集合,为解决DataReader的缺陷设计的,DataReader数据处理速度快,但它是只读的,一旦移到下一行就不能查看上一行的数据,DataSet则可以自由移动指针。DataSet的数据是与数据库断开的。DataSet还可用于多层应用程序中,如果应用程序运行在中间层的业务对象中来访问数据库,则业务对象需将脱机数据结构传递给客户应用程序。
在执行对表中数据的查询时还能将数据保存到 DataSet 中,但需要借助 DataAdapter 类来实现。在实际应用中,DataAdapter 与 DataSet 是在查询操作中使用最多的类。此外,还可以通过 DataSet 实现对表中数据的增加、修改、删除操作。
使用 DataSet 和 DataTable 类存放查询结果
在实际应用中,将查询结果存储到 DataSet 类或 DataTable 类中均可,在操作查询结果时也非常类似。下面分别通过实例来演示 DataSet 和 DataTable 的使用。
【实例】创建 Windows 应用程序,查询数据库carsys用户信息表(Brand)中的所有用户名,并将用户名显示在列表控件(ListBox)中。根据题目要求,设置用户信息查询界面如下图所示。
一、SqlDataAdapter和DataSet配合使用
单击button1按钮,将所有用户名显示到 ListBox 控件中,首先使用 DataSet 对象存储查询结果,代码如下。
第一步:创建一个WINFORM窗体,窗体上有一个button1按钮和一个listBox1下拉框。
第二步:添加MySQL数据库引用
接着在程序中添加MySQL命名空间引用
1 | using MySql.Data.MySqlClient; |
完整的程序代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient; namespace WindowsFormsApp3 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息 //创建 SQLConnection 的实例 MySqlConnection connection = new MySqlConnection(constr);//创建一个SqlConnection对象 try //将可能出错的语句放在try语句里 { connection.Open(); string sqlstr = "select * from Brand";//声明一个字符串,用来存放查询数据库表语句 //创建 SQLDataAdapter 类的对象 MySqlDataAdapter sda = new MySqlDataAdapter(sqlstr, connection); //创建DataSet类的对象 DataSet ds = new DataSet(); //使用SQLDataAdapter对象sda将查询结果填充到Dataset对象ds中 sda.Fill(ds); //设置ListBox控件的数据源(DataSource)属性 listBox1.DataSource = ds.Tables[0]; //在listBox控件中显示name列的值 listBox1.DisplayMember = ds.Tables[0].Columns[1].ToString(); } catch (Exception ex) { MessageBox.Show("查询失败!" + ex.Message); } finally { if (connection != null) { //关闭数据库连接 connection.Close(); } } } } } |
数据库carsys用户信息表(Brand)中的信息参见下图。
运行该窗体,鼠标点击button1按钮后,效果如下图所示。
从上面的运行效果可以看出,已经将用户信息表 (Brand) 中的所有用户名显示在列表控件 (ListBox) 中。
需要注意的是,ListBox 控件中的 DataSource 属性用于设置控件中内容的数据源,并需要通过 DisplayMember 属性来指定显示在 ListBox 控件中的内容。
二、SqlDataAdapter和DataTable配合使用
在本实例中将 DataSet 对象换成 DataTable 对象,更改部分代码如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using MySql.Data.MySqlClient; namespace WindowsFormsApp4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string constr = "Server=localhost;UserId=root;Password=68331;Database=CarSYS;pooling=false;CharSet=utf8;port=3306";//声明一个字符串用来存放连接数据库的信息 //创建 SQLConnection 的实例 MySqlConnection connection = new MySqlConnection(constr);//创建一个SqlConnection对象 try //将可能出错的语句放在try语句里 { connection.Open(); string sqlstr = "select * from Brand";//声明一个字符串,用来存放查询数据库表语句 //创建 SQLDataAdapter 类的对象 MySqlDataAdapter sda = new MySqlDataAdapter(sqlstr, connection); //创建 DataTable 类的对象 DataTable dt = new DataTable(); //使用 SqlDataAdapter对象sda将查询结果填充到DataTable对象dt中 sda.Fill(dt); //设置ListBox控件的数据源(DataSource)属性 listBox1.DataSource = dt; //在listBox控件中显示name列的值 listBox1.DisplayMember = dt.Columns[1].ToString(); } catch (Exception ex) { MessageBox.Show("查询失败!" + ex.Message); } finally { if (connection != null) { //关闭数据库连接 connection.Close(); } } } } } |
运行效果和上面一样,参见下图。
https://www.cnblogs.com/liuyi-li/p/6340411.html