HIS-第七周学习笔记:ADO.Net中DataTable的应用

思维导图在这里插入图片描述

知识点描述

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

  2. DataTable常用属性

属性描述
DataTable()不带参数初始化 DataTable 类的新实例
DataTable(String)用指定的表名初始化 DataTable 类的新实例
DataTable(SerializationInfo, StreamingContext)使用 SerializationInfo 和 StreamingContext 初始化 DataTable 类的新实例
DataTable(String, String)用指定的表名和命名空间初始化 DataTable 类的新实例
CaseSensitive指示表中的字符串比较是否区分大小写
ChildRelations获取此 DataTable 的子关系的集合
Columns获取属于该表的列的集合
Constraints获取由该表维护的约束的集合
Container获取组件的容器(继承自 MarshalByValueComponent)
DataSet获取此表所属的 DataSet
DefaultView获取可能包括筛选视图或游标位置的表的自定义视图
DesignMode获取指示组件当前是否处于设计模式的值 (继承自 MarshalByValueComponent)
DisplayExpression获取或设置一个表达式,该表达式返回的值用于表示用户界面中的此表DisplayExpression 属性用于在用户界面中显示此表的名称
Events获取附加到该组件的事件处理程序的列表 (继承自 MarshalByValueComponent)
ExtendedProperties获取自定义用户信息的集合
HasErrors获取一个值,该值指示该表所属的 DataSet 的任何表的任何行中是否有错误
IsInitialized获取一个值,该值指示是否已初始化 DataTable
Locale获取或设置用于比较表中字符串的区域设置信息
MinimumCapacity获取或设置该表最初的起始大小
Namespace获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间
ParentRelations获取该 DataTable 的父关系的集合
Prefix获取或设置 DataTable 中所存储数据的 XML 表示形式的命名空间
PrimaryKey获取或设置充当数据表主键的列的数组
RemotingFormat获取或设置序列化格式
Rows获取属于该表的行的集合
Site获取或设置 DataTable 的 System.ComponentModel.ISite (重写 MarshalByValueComponent.Site)
TableName获取或设置 DataTable 的名称
  1. DataTable常用方法
属性描述
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
  1. DataTable 事件
事件说明
ColumnChanged在 DataRow 中指定的 DataColumn 的值被更改后发生
ColumnChanging在 DataRow 中指定的 DataColumn 的值发生更改时发生
Disposed添加事件处理程序以侦听组件上的 Disposed 事件 (继承自 MarshalByValueComponent)
Initialized初始化 DataTable 后发生
RowChanged在成功更改 DataRow 之后发生
RowChanging在 DataRow 正在更改时发生
RowDeleted在表中的行已被删除后发生
RowDeleting在表中的行要被删除之前发生
TableCleared清除 DataTable 后发生
TableClearing清除 DataTable 后发生
TableNewRow插入新 DataRow 时发生
  1. 构造函数
    DataTable() 不带参数初始化DataTable 类的新实例。
    DataTable(string tableName) 用指定的表名初始化DataTable 类的新实例。
    DataTable(string tableName, string tableNamespace) 用指定的表名和命名空间初始化DataTable类的新实例。

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

示例代码

private void btn_Load_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                             
            sqlConnection.ConnectionString =
                "Server=(local);Database=EduBaseMenzhen;Integrated Security=sspi";                         
            SqlCommand sqlCommand = new SqlCommand();                                                      
            sqlCommand.Connection = sqlConnection;                                                         
            sqlCommand.CommandText = "SELECT * FROM tb_Patients;";                                           
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           
            sqlDataAdapter.SelectCommand = sqlCommand;                                                     
            sqlDataAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey;                         
            this.PatientTable = new DataTable();                                                            
            sqlConnection.Open();                                                                           
            sqlDataAdapter.Fill(this.PatientTable);                                                         
            sqlConnection.Close();                                                                          
            this.dgv_Course.Columns.Clear();                                                                
            this.dgv_Course.DataSource = this.PatientTable;                                                 
            this.dgv_Course.Columns["No"].HeaderText = "编号";                                              
            this.dgv_Course.Columns["Name"].HeaderText = "名称";
            this.dgv_Course.Columns["Gender"].HeaderText = "性别";
            this.dgv_Course.Columns["BirthDate"].HeaderText = "出生日期";
            this.dgv_Course.Columns["PoliticalStatus"].HeaderText = "政治地位";
            this.dgv_Course.Columns["Nationality"].HeaderText = "民族";
            this.dgv_Course.Columns["Province"].HeaderText = "省";                                              
            this.dgv_Course.Columns["City"].HeaderText = "城市";
            this.dgv_Course.Columns["IdentificationCard"].HeaderText = "身份证";
            this.dgv_Course.Columns["Phone"].HeaderText = "电话";
            this.dgv_Course.Columns["PatientsNo"].HeaderText = "编号";
        }

        private void btn_SearchByNo_Click(object sender, EventArgs e)
        {
            DataRow searchResultRow = this.PatientTable.Rows.Find(this.txb_CourseNo.Text.Trim());            
            DataTable searchResultTable = this.PatientTable.Clone();                                         
            searchResultTable.ImportRow(searchResultRow);                                                   
            this.dgv_Course.DataSource = searchResultTable;                                                
        }

        private void btn_SearchByName_Click(object sender, EventArgs e)
        {
            DataRow searchResultRow = this.PatientTable.Rows.Find(this.txb_CourseName.Text.Trim());                           
            DataTable searchResultTable = this.PatientTable.Clone();                                        
            searchResultTable.ImportRow(searchResultRow);
            this.dgv_Course.DataSource = searchResultTable;                                                 
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值