ADO.NET之DataTable
ADO.NET可以在与数据库断开连接的方式下通过DataSet或DataTable对象进行数据处理,当需要更新数据时才重新与数据源进行连接,并更新数据源。DataTable对象表示保存在本机内存中的表,它提供了对表中行列数据对象的各种操作。下面我们来简单介绍一下DataTable。
思维导图:
DataTable属性和方法
属性 | 说明 |
---|---|
Columns | 它用于获取属于此表的列的集合。 |
Constraints | 它被用来获取由这个表维护的约束的集合。 |
DataSet | 它用于获取此表所属的DataSet。 |
DefaultView | 它用于获取可能包含过滤视图的表的自定义视图。 |
HasErrors | 它用于获取指示DataSet表中的任何行中是否存在错误的值。 |
MinimumCapacity | 它用于获取或设置此表的初始起始大小。 |
PrimaryKey | 它用于获取或设置一个用作数据表主键的列数组。 |
Rows | 它用于获取属于此表的行的集合。 |
TableName | 它用于获取或设置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。 |
下面来讲讲怎么使用DataTable
DataTable类将关系数据表示为表格形式。ADO.NET提供了一个DataTable类来独立创建和使用数据表。它也可以和DataSet一起使用。 最初,当创建DataTable时,它没有表模式。我们可以通过向表中添加列和约束来创建表模式。在定义表模式之后,可以向表中添加行。在创建DataTable之前,必须包含System.Data名称空间。最后将SQL Server数据库中的表填充到DataTable对象中
一.创建DataTable对象
可以通过以下两种方式创建DataTable对象
1.通过DataTable类的构造函数创建DataTable对象;
例如:DataTable ygtable = new DataTable();
2.通过DataSet的Tables对象的Add方法创建DataTable对象;
例如:
DataSet dataset = new DataSet();
DataTable ygtable = dataset.Tables.Add("MyTableName")
二.在DataTable对象中添加列
在DataTable对象中添加列的最常用的方法是通过DataTable对象的Column属性中的Add方法。添加后的每一列都是一个DataColumn对象。
例如:
调用DataTable对象的Column中的Add方法添加列。例如:
DataTable table = new DataTable(“table1”);
table.Columns.Add(“工号”,typeof(System.Data.SqlTypes.SqlString));
table.Columns.Add(“姓名”,typeof(System.Data.SqlTypes.SqlString));
三. 设置DataTable对象的主键
关系数据库中的表一般都有一个主键,用来惟一标识表中的每一行记录。通过DataTable对象的PrimaryKey属性可以设置Datatable的主键。主键可以是一个或者多个DataColumn对象组成的数组。
例如:
DataColumn[] key = new DataColumn[1];//dt是一个DataTable对象
key[0] = dt.Columns[0];
dt.PrimaryKey = key;
四. 在DataTable对象中创建行
在DataTable对象中创建行DataTable对象的每一行都是一个DataRow对象,所以创建行时可以先利用DataTable对象的NewRow方法创建一个DataRow对象,并设置新行中各列的数据,然后利用Add方法将DataRow对象添加到表中
五.将SQL Server数据库中的表填充到DataTable对象中
先声明实例化数据库连接,指定SQL命令为查询科室
SqlConnection sqlConnection = new SqlConnection(); //声明并实例化SQL连接;
sqlConnection.ConnectionString =
ConfigurationManager.ConnectionStrings["Sql"].ConnectionString; //配置管理器从配置文件读取连接字符串,并将之赋予SQL连接的连接字符串属性;
SqlCommand sqlCommand2 = new SqlCommand(); //声明并实例化SQL命令;
sqlCommand2.Connection = sqlConnection; //将SQL命令的连接属性指向SQL连接;
sqlCommand2.CommandText = "SELECT * FROM tb_ks;"; //指定SQL命令的命令文本;该命令查询指定科室;
接着通过DataAdapter对象的Fill方法完成。
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
sqlDataAdapter.SelectCommand = sqlCommand2; //将SQL数据适配器的查询命令属性指向SQL命令;
DataTable ksTable = new DataTable(); //声明并实例化数据表,用于保存所有科室,以用作下拉框数据源;
sqlConnection.Open(); //打开SQL连接;
sqlDataAdapter.Fill(ksTable); //SQL数据适配器读取数据,并填充科室数据表;
this.cmb_ks.DataSource = ksTable; //将班级下拉框的数据源设为科室数据表;
this.cmb_ks.DisplayMember = "Name"; //将科室下拉框的显示成员设为科室数据表的名称列;
this.cmb_ks.ValueMember = "No"; //将班级下拉框的值成员设为科室数据表的编号列;
SqlDataReader sqlDataReader = sqlCommand2.ExecuteReader(); //调用SQL命令的方法ExecuteReader来执行命令,并获取数据阅读器;
运行结果图: