DataSet、DataTable、DataRow的关系是包含(或着说父子)关系。
举个例子:
DataSet 相当于一个数据库;
DataTable 相当于一张表;
DataRow 相当于一条表里的数据。
写个例子说明一下它们是怎么用的,有什么关系。
窗体程序准备好两个DataGridView,一个准备用DataTable 设置数据源,一个用DataSet设置数据源。点击按钮直接获取数据。
按钮点击事件代码:
private void button1_Click(object sender, EventArgs e)
{
//数据库的连接串
string connStr = "Data Source=.; Initial Catalog=TestDB;User ID=sa;Password=123456";
SqlConnection conn = null; //创建 SQLConnection实例
conn = new SqlConnection(connStr);
conn.Open(); //打开数据库链接
string sql = "select * from tblStudent";
SqlDataAdapter sda = new SqlDataAdapter(sql, conn); //创建 SQLDataAdapter 对象,获取查询结果
DataTable dt = new DataTable(); //创建DataTable 对象
sda.Fill(dt); //将查询结果填充到DataTable
Stu1_dataGridView1.DataSource = dt;//把DataTable里面的第一个对象绑定到第一个dataGridView
DataSet ds = new DataSet();//创建DataSet 对象
ds.Tables.Add(dt); //将dataTable 添加到DataSet
Stu2_dataGridView2.DataSource = ds.Tables[0]; //把DataSet里面的第一个对象绑定到第二个dataGridView
}
显示结果如下:
第一个DataGridView 是使用Datatable 赋值数据的,第二个DataGridView 是使用DataSet 赋值数据的。
但它们的效果是一样的,因为DataTable 是可以直接添加到Dataset 里面了。ds.Tables[0] 就是原来的DataTable 的数据。
顺口提一句:当然,SqlDataAdapter 对象也是可以直接填充到DataSet的
sda.Fill(ds); //SqlDataAdapter 对象直接填充到DataSet
而DataRow 则是DataTable 里的一条数据,一条DataRow 相当于:
比如说我在代码中添加如下图的代码:
代码块:
te void button1_Click(object sender, EventArgs e)
{
//数据库的连接串
string connStr = "Data Source=.; Initial Catalog=TestDB;User ID=sa;Password=123456";
SqlConnection conn = null; //创建 SQLConnection实例
conn = new SqlConnection(connStr);
conn.Open(); //打开数据库链接
string sql = "select * from tblStudent";
SqlDataAdapter sda = new SqlDataAdapter(sql, conn); //创建 SQLDataAdapter 对象,获取查询结果
DataTable dt = new DataTable(); //创建DataTable 对象
sda.Fill(dt); //将查询结果填充到DataTable
DataRow dr = dt.NewRow(); //创建与该表具有相同架构的行
dr["StuID"] = 190805;
dr["StuName"] = "程小媛";
dr["Sex"] = "女";
dr["Age"] = 18;
dr["Phone"] = "15634567890";
dt.Rows.Add(dr); //将一条DataRow 数据添加到DataTable
Stu1_dataGridView1.DataSource = dt;//把DataTable里面的第一个对象绑定到第一个dataGridView
DataSet ds = new DataSet();//创建DataSet 对象
ds.Tables.Add(dt); //将dataTable 添加到DataSet
Stu2_dataGridView2.DataSource = ds.Tables[0]; //把DataSet里面的第一个对象绑定到第二个dataGridView
}
而此时运行程序的时候,“程小媛” 这条数据就会添加到DataTable 里面,如下图:
另外,tblStudent 的结构如下:
CREATE TABLE [dbo].[tblStudent](
StuID int PRIMARY KEY,--学号
StuName varchar(16) not null, --姓名
Sex varchar(4) not null,--性别
Age int not null, --年龄
Phone varchar(32) --联系电话
)
insert into tblStudent values(190801,'张小三','男',18,'13838284392')
insert into tblStudent values(190802,'赵四四','男',19,'0755-3985632')
insert into tblStudent values(190803,'李小兰','女',17,'13838622426')
insert into tblStudent values(190804,'许安安','女',18,'+8618342469978')
------ 汗水是咸的,但用它浇灌理想之树,结出来的果实则是甜的。