DataSet对象
当应用程序需要查询数据时,可以使用DataReader对象读取数据,DataReader每次都只能读取一行数据到内存中,并且要一直与数据库保持连接.而且是只读只进型的读取方法.给程序想再次获得读取过的数据带来了麻烦.利用数据集,我们可以在断开与数据库连接的情况下操作数据,可以操作来自多个相同或不同数据源的数据
1.1认识DataSet对象
我们可以把数据集简单的理解为一个临时的数据库,他把应用程序需要的数据临时保存在内存中,由于这些数据都缓存在本地机器上,就不需要一直保存和数据库的连接.当应用程序需要数据时,就直接从内存中的数据集读取数据,也可以对数据集中的数据进行修改,然后将修改后的数据一起提交到数据库.
数据集不直接和数据库打交道,它和数据库之间的相互作用都是通过.Net数据提供程序来完成的,所以数据集是独立于任何数据库的.
1.2创建DataSet
DateSet位于System.Data命名空间中,创建DataSet语法如下
[语法]:
DataSet 数据集对象 = new DataSet("数据集的名称字符串");
方法中的参数是数据集的名称,可以有,也可以没有,如果没有写参数,创建的数据集的名称默认为NewDataSet.
例如:
DataSet myDataSet = new DataSet();
DataSet myDataSet = new DataSet("MySchool");
2 DataAdapter对象
数据适配器数据库和DataSet对象连接的桥梁
2.1认识DataAdapter对象
.NET 数据提供程序 | 连接类 |
---|---|
SQL 数据提供程序 System.Data.SqlClient命名空间中 |
SqlDataAdapter |
OLE DB 数据提供程序 System.Data.OleDb命名空间中 |
OleDbDataAdapter |
ODBC 数据提供程序 System.Data.Odbc命名空间中 |
OdbcDataAdapter |
Oracle 数据提供程序 System.Data.OracleClient命名空间中 |
OracleDataAdapter |
DataAdapter对象的主要属性和方法
属性:SelectCommand 从数据库检索数据的Command对象
方法
Fill() 向DataSet中的表填充数据
Update 将DataSet中的数据提交到数据库
2.2填充数据集
使用DataAdapter填充数据集需要四个步骤
(1)创建数据库连接对象
(2)创建从数据库查询数据用的SQL语句
(3)利用上面创建的SQL语句和Connection对象创建DataAdapter对象
语法:
SqlDataAdapter 对象名 = new SqlDataAdapter(查询用的SQL语句,数据库连接);
或者
SqlDataAdqpter adapter = new SqlDataAdapter();
SqlCommand command = new SqlCommand(查询用的SQL语句,数据库连接);
adapter.SelectCommand = command;
(4)调用DataAdapter对象的Fill方法填充数据集
语法:
DataAdapter对象.Fill(数据集对象,"数据表名称字符串");
Fill()方法接收一个数据表名称的字符串参数.如果数据集中原来没有这个数据表,调用Fill()方法后就会创建一个数据表.如果数据集中原来有这个数据表,就会把现在查出的结果继续添加到数据表中.
经验:
创建一个DataAdapter对象,都与Connection.Command对象有关,并且要编写SQL语句
在不同的代码段中,Connection对象出现的位置可能不同
3.数据绑定
数据绑定是为了在控件上显示数据库中存储的数据,而将应用程序的控件与数据库的任何列或行进行绑定的过程.VS使用DataSource属性为我们提供了静态和动态的数据绑定,教好的解决了这个问题,降低了代码的复杂度
3.1ComboBox数据绑定
通过组合框实现绑定数据时,常使用的属性为:
DataSource 获取或设置数据源
DisplayMember 获取或设置要为此ListContiol显示的属性
ValueMember 获取或设置一个属性,该属性将用做ListControl中项的实际值.
4.认识DataGridView控件
数据网格视图控件是一个很强大的控件,在DataGridView中还可以直接修改和删除数据.
DataGridView控件能够以表格的形式显示数据,可以设置为只读,也可以允许编辑数据.要想指定DataGridView显示哪个表的数据,只需要设置他的DataSource属性,使用一行代码就能实现
主要属性:
Columns 包含列的集合
DataSource DataView的数据源
ReadOnly 是否可以编辑单元格
各列的主要属性:
DataPropertyName 绑定数据列的名称
HeaderText 列标题文本
Visible 制定列是否可见
Frozen 指定水平滚动DataGridView时列是否移动
ReadOnly 指定单元格是否为只读
4.使用DataGridView控件显示数据
(1)添加控件
(2)设置DataGridView的属性和各列的属性
(3)筛选信息(查询用)
(4)绑定DataGridView的数据源
4.保存对数据集的修改
(1)使用SqlCommandBuilder对象生成更新用的相关命令
[语法]:
sqlCommandBuilder Builder = new SqlCommandBuilder(已创建的DataAdaptr对象);
(2)调用DataAdapter对象的Update方法
DataAdaptre对象.Update(数据集对象,"数据表名称字符串");
经验:
SqlCommandBuilder只操作单个表.也就是说,创建DataAdaptr对象时.使用的SQL语句只能从一个表里面查数据,不能进行联合查询.
常见错误:
(1)不使用sqlCommandBuilder直接调用Updata()方法
(2)利用DataGridView显示数据集中表时,没有为他的列设置DataPropertName属性