一.思维导图
二.知识点
DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。
命名空间:System.Data
表示数据在内存中的缓存。
1.在实际应用中,DataSet使用方法一般有三种
(1) 把数据库中的数据通过DataAdapter对象填充DataSet。
(2) 通过DataAdapter对象操作DataSet实现更新数据库。
(3) 把XML数据流或文本加载到DataSet。
2.属性和方法
2.1属性
CaseSensitive | 获取或设置一个值,该值指示 DataTable 对象中的字符串比较是否区分大小写。 |
Container | 获取组件的容器。 |
DataSetName | 获取或设置当前DataSet的名称 |
HasErrors | 获取一个值,指示在此DataTable 中的任何 DataSet 对象中是否存在错误 |
Tables | 获取包含在DataSet 中的表的集合 |
2.2方法
Clear() |
通过移除所有表中的所有行来清除任何数据的 DataSet。 |
Clone() |
复制 DataSet 的结构,包括所有 DataTable 架构、关系和约束。 不要复制任何数据。 |
Copy() |
复制该 DataSet 的结构和数据。 |
CreateDataReader() |
为每个 DataTableReader 返回带有一个结果集的 DataTable,顺序与 Tables 集合中表的显示顺序相同。 |
CreateDataReader(DataTable[]) |
为每个 DataTableReader返回带有一个结果集的 DataTable。 |
Dispose() |
释放由 MarshalByValueComponent使用的所有资源。 |
Equals(Object) |
确定指定的对象是否等于当前对象。 |
GetChanges() |
获取 DataSet 的副本,该副本包含自加载以来或自上次调用 AcceptChanges() 以来对该数据集进行的所有更改。 |
GetChanges(DataRowState) |
获取由 DataRowState 筛选的 DataSet 的副本,该副本包含上次加载以来或调用 AcceptChanges() 以来进行的所有更改。 |
GetType() |
获取当前实例的 Type。 |
HasChanges() |
获取一个值,该值指示 DataSet 是否有更改,包括新增行、已删除的行或已修改的行。 |
Haschanges(DataRowState) |
获取一个值,该值指示 DataSet 是否有 DataRowState 被筛选的更改,包括新增行、已删除的行或已修改的行。 |
Reset() |
清除所有表并从 DataSet 中删除所有关系、外部约束和表。 子类应重写 Reset(),以便将 DataSet还原到其原始状态。 |
ToString() |
返回包含 Component 的名称的 String(如果有)。 不应重写此方法。 |
三.示例代码和效果截图
示例代码
1.DataAdapter填充DataSet的过程分为二步:首先通过DataAdapter的SelectCommand属性从数据库中检索出需要的数据。SelectCommand其实是一个Command对象。然后再通过DataAdapter的Fill方法把检索来的数据填充 DataSet。
1 SqlConnection sqlConnection1 = new SqlConnection ( "Data Source=localhost;IntegratedSecurity=SSPI 2 ;InitialCatalog=Northwind" ) ; 3 SqlCommand selectCMD = new SqlCommand ( "SELECT CustomerID , CompanyName FROM Customers" , sqlConnection1 ) ; 4 SqlDataAdapter sqlDataAdapter1 = new SqlDataAdapter ( ) ; 5 custDA.SelectCommand = selectCMD ; 6 sqlConnection.Open ( ) ; 7 DataSet dsDataSet1 = new DataSet ( ) ; 8 sqlDataAdapter1.Fill ( dsDataSet1 , "Customers" ) ; 9 sqlConnection.Close ( ) ;
2.DataAdapter是通过其Update方法实现以DataSet中数据来更新数据库的。当DataSet实例中包含数据发生更改后,此时调用Update方法,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或 DELETE),并以此命令来更新数据库中的数据。
1 SqlCommandBuilder sqlCommandBuilder1 = new SqlCommandBuilder ( sqlDataAdapter1 ) ; 2 dsDataSet1.Tables["Customers"].Rows[0].Delete ( ) ; 3 sqlDataAdapter1.Update ( dsDataSet1 ,"Customers" ) ; 4 dsDataSet1.Tables["Customers"].AcceptChanges ( ) ;
1 DataSetds = new DataSet(); 2 DataTabletbl = new DataTable("Customers"); 3 ds.Tables.Add(tbl); 4 DataSetds = new DataSet(); 5 DataTabletbl = ds.Tables.Add("Customers");
效果截图
SqlConnection sqlConnection = new SqlConnection(); sqlConnection.ConnectionString = "Server=(local);Database=MyHospital;Integrated Security=sspi"; SqlCommand sqlCommand = new SqlCommand(); sqlCommand.Connection = sqlConnection; sqlCommand.CommandText = "SELECT Lyl*IndPrice AS Useprice FROM medicineBuy where CONVERT(varchar(10),datepart(yy,Lydate))+'年'+ CONVERT(varchar(10),datepart(mm,Lydate))+'月'=CONVERT(VARCHAR(30),@date);" //该命令分别查询所有院系、专业、班级,查询结果将返回多张表; + "SELECT Num*IndPrice AS TotalInprice FROM orders where CONVERT(varchar(10),datepart(yy,OrderDate))+'年'+ CONVERT(varchar(10),datepart(mm,OrderDate))+'月'=CONVERT(VARCHAR(30),@date) AND State=1;" + "SELECT Num*IndPrice AS cancal FROM orders where CONVERT(varchar(10),datepart(yy,OrderDate))+'年'+ CONVERT(varchar(10),datepart(mm,OrderDate))+'月'=CONVERT(VARCHAR(30),@date) AND State=1 AND cancel=1;"; sqlCommand.Parameters.AddWithValue("@date", this.cmb_date.Text.ToString()); SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(); sqlDataAdapter.SelectCommand = sqlCommand; DataSet dataSet = new DataSet(); sqlConnection.Open(); sqlDataAdapter.Fill(dataSet); sqlConnection.Close(); DataTable UsepriceTable = dataSet.Tables[0]; DataTable TotalInpriceTable = dataSet.Tables[1]; DataTable cancalTable = dataSet.Tables[2]; this.Monthbuy.Text = UsepriceTable.Compute("SUM(Useprice)", "").ToString(); this.MonthInput.Text = TotalInpriceTable.Compute("SUM(TotalInprice)", "").ToString(); this.MonthCancel.Text = cancalTable.Compute("SUM(cancal)", "").ToString();