HIS-第七周学习笔记:ADO.Net中DataTable的应用
思维导图
知识点描述
-
定义
DataTable是一个表示内存中数据的一个表。数据库中存储的是实体表,实体表中有一系列的数据。而DataTable即存储在内存中的表,是可以独立创建和使用的。在持久化到数据库之前,是不会对数据库产生影响的,持久化到数据库可以使用dataAdapter.Update的方法(dataAdapter是某个实例化的DataAdapter对象)。 -
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 的名称 |
- 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 |
- DataTable 事件
事件 | 说明 |
---|---|
ColumnChanged | 在 DataRow 中指定的 DataColumn 的值被更改后发生 |
ColumnChanging | 在 DataRow 中指定的 DataColumn 的值发生更改时发生 |
Disposed | 添加事件处理程序以侦听组件上的 Disposed 事件 (继承自 MarshalByValueComponent) |
Initialized | 初始化 DataTable 后发生 |
RowChanged | 在成功更改 DataRow 之后发生 |
RowChanging | 在 DataRow 正在更改时发生 |
RowDeleted | 在表中的行已被删除后发生 |
RowDeleting | 在表中的行要被删除之前发生 |
TableCleared | 清除 DataTable 后发生 |
TableClearing | 清除 DataTable 后发生 |
TableNewRow | 插入新 DataRow 时发生 |
-
构造函数
DataTable() 不带参数初始化DataTable 类的新实例。
DataTable(string tableName) 用指定的表名初始化DataTable 类的新实例。
DataTable(string tableName, string tableNamespace) 用指定的表名和命名空间初始化DataTable类的新实例。 -
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;
}