第八周学习笔记: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方法。

二、思维导图
思维导图
三、示例代码
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));//创建带列名和类型的列

四、运行效果
点击载入前:
在这里插入图片描述
点击载入后:
在这里插入图片描述
在检索框输入“牛黄“,点击根据名称检索,可以实现模糊检索:
在这里插入图片描述
点击更新前:
在这里插入图片描述
我们对“牛黄解毒片”的零售价、是否为处方药以及供应商直接在数据表中进行更改,然后点击更新:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值