C# DataSet和DataTable应用实例

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