第八周学习笔记:ADO.Net中DataTable的应用

一、知识点描述
1.定义
DataTable是一个表示内存中数据的一个表。数据库中存储的是实体表,实体表中有一系列的数据。而DataTable即存储在内存中的表,是可以独立创建和使用的。在持久化到数据库之前,是不会对数据库产生影响的,持久化到数据库可以使用dataAdapter.Update的方法(dataAdapter是某个实例化的DataAdapter对象)。
2.DataTable常用属性

属性 描述
Columns 它用于获取属于此表的列的集合
Constraints 它被用来获取由这个表维护的约束的集合
DataSet 它用于获取此表所属的DataSet
DefaultView 它用于获取可能包含过滤视图的表的自定义视图
HasErrors 它用于获取指示DataSet表中的任何行中是否存在错误的值
MinimumCapacity 它用于获取或设置此表的初始起始大小
PrimaryKey 它用于获取或设置一个用作数据表主键的列数组
Rows 它用于获取属于此表的行的集合
TableName 它用于获取或设置DataTable的名称

3.DataTable常用方法

属性 描述
AcceptChanges() 它用于提交对此表进行的所有更改
Clear() 它用来清除所有数据的DataTable
Clone() 它被用来克隆DataTable的结构
Copy() 它用于复制DataTable的结构和数据
CreateDataReader() 它用于返回与此DataTable中的数据相对应的DataTableReader
CreateInstance() 它用于创建DataTable的新实例
GetRowType() 它用于获取行类型
GetSchema() 它用来获取表的模式
ImportRow(DataRow) 它用于将DataRow复制到DataTable中
Load(IDataReader) 它用于使用提供的IDataReader从数据源填充DataTable
Merge(DataTable, Boolean) 它用于合并指定的DataTable和当前的DataTable
NewRow() 它用于创建一个与表具有相同模式的新DataRow
Select() 它用于获取所有DataRow对象的数组
WriteXml(String) 用于使用指定的文件将DataTable的当前内容写为XML

4.构造函数
DataTable() 不带参数初始化DataTable 类的新实例。
DataTable(string tableName) 用指定的表名初始化DataTable 类的新实例。
DataTable(string tableName, string tableNamespace) 用指定的表名和命名空间初始化DataTable类的新实例。

5.DataSet与DataTable
DataSet中可包括多个 DataTable,可将多个查询结构存到一个DataSet中,方便操作,而DataTable中又包括多个DataRow、DataColumn,可通过这些DataRow、DataColumn来查看、操作其中的数据,而需将操作结果返回给数据库的话,则可以调用DataAdapter的 Update方法。

二、思维导图
第八周学习笔记:ADO.Net中DataTable的应用_第1张图片
三、示例代码
1.添加引用

using System.Data;

2.利用SQL数据适配器创建并填充数据表

SqlConnection sqlConnection = new SqlConnection();
            sqlConnection.ConnectionString =
                ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.Connection = sqlConnection;
            sqlCommand.CommandText = "SELECT * FROM tb_Drug;"; 
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();   //声明并实例化SQL数据适配器;
            sqlDataAdapter.SelectCommand = sqlCommand;      //将SQL数据适配器的查询命令属性指向SQL命令;
            sqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;   //设置SQL数据适配器在缺少架构时的动作为追加主键,从而获取数据库中定义的主键;
            this.DrugTable = new DataTable();   //实例化本窗体的药品数据表,用于保存所有药品,以用作数据网格视图数据源;
            sqlConnection.Open();     //打开SQL连接;
            sqlDataAdapter.Fill(this.DrugTable);   //SQL数据适配器读取数据,并填充药品表;
            sqlConnection.Close(); 

3.添加行

foreach (DataRow row in searchResultRows)       //遍历搜索结果所在数据行数组;
            {
                searchResultTable.ImportRow(row);       //数据行导入数据表;
            }
            this.dgv_Drug.DataSource = searchResultTable;     //将数据网格视图的数据源设为搜索结果数据表;

4.复制表

//复制表,同时复制了表结构和表中的数据
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
//复制表
DataTable dtNew = dt.Copy();  //复制dt表数据结构
dtNew.Clear()  //清空数据
for (int i = 0; i < dt.Rows.Count; i++)
{
    if (条件语句)
    {
         dtNew.Rows.Add(dt.Rows[i].ItemArray);  //添加数据行
    }
}
//克隆表,只是复制了表结构,不包括数据
DataTable dtNew = new DataTable();
dtNew = dt.Clone();
//如果只需要某个表中的某一行
DataTable dtNew = new DataTable();
dtNew = dt.Copy();
dtNew.Rows.Clear();//清空表数据
dtNew.ImportRow(dt.Rows[0]);//这是加入的是第一行

5.创建行、列

DataRow dr = dt.NewRow();//创建空行
dt.Rows.Add(dr);//创建空行

DataColumn dc = new DataColumn();//创建空列
dt.Columns.Add(dc);//创建带列名的列
dt.Columns.Add("总价", typeof(String));//创建带列名和类型的列

四、运行效果
点击载入前:
第八周学习笔记:ADO.Net中DataTable的应用_第2张图片
点击载入后:
第八周学习笔记:ADO.Net中DataTable的应用_第3张图片
在检索框输入“牛黄“,点击根据名称检索,可以实现模糊检索:
第八周学习笔记:ADO.Net中DataTable的应用_第4张图片
点击更新前:
第八周学习笔记:ADO.Net中DataTable的应用_第5张图片
我们对“牛黄解毒片”的零售价、是否为处方药以及供应商直接在数据表中进行更改,然后点击更新:
第八周学习笔记:ADO.Net中DataTable的应用_第6张图片
第八周学习笔记:ADO.Net中DataTable的应用_第7张图片

你可能感兴趣的:(第八周学习笔记:ADO.Net中DataTable的应用)