2018年11月12日星期一

ADO.Net中DataSet的应用

一:什么是DataSet?

DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的.

 

 

二:DataSet特点

1) 独立性。DataSet独立于各种数据源,可以处理脱机数据,在多层应用程序中很有用.

(2) 离线(断开)和连接,即允许在任何时候查看DataSet中任意行的内容,允许修改查询结果的方法。。

(3) XML的完整性,即DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。

三:DataSet与DataReader的关系

   DataSet 是ADO.NET开发人员为方便数据处理开发出来的,是数据的集合,是为解决DataReader的缺陷设计的,DataReader数据处理速度快,但 它是只读的,而且一旦移到下一行,就不能查看上一行的数据,DataSet则可以自由移动指针。

四:DataTable和DataSet区别

     DataSet包含很多个DataTable: 一张表的时候用DataTable就可以,多张表就用DataSet了(datatable是一张表,dataset是表的集合。)

可以认为DataSet就是一个数据库,DataTable就是数据库里的表。

五:思维导图

 

 

六:DataSet使用方法

(1)把数据库中的数据通过DataAdapter对象填充DataSet。

 例:在此例中,我将使用DataAdapter填充DataSet。如下列代码中的黄线部分。

            bool dd = true;

            try

            {

                sqlCommand.ExecuteNonQuery();

            }

            catch

            {           

 

                dd = false;

                MessageBox.Show("查询失败!该患者不存在!");

 

            }

           if(dd)

            {

          SqlDataAdapter da = new SqlDataAdapter();

                da.SelectCommand = sqlCommand;

                DataSet d = new DataSet();

                da.Fill(d);

                int b = d.Tables[0].Rows.Count;

                if (b > 0)

                {

label41.Text = d.Tables[0].Rows[0]["yi"].ToString();

 label40.Text = d.Tables[0].Rows[0]["er"].ToString();

label39.Text = d.Tables[0].Rows[0]["san"].ToString();

label38.Text = d.Tables[0].Rows[0]["si"].ToString();

                }

操作成功后,在每个label框中都会显现对应的数据。

 

 

(2)使用DataSet填充树形菜单

代码:

SqlConnection sqlConnection = new SqlConnection();

sqlConnection.ConnectionString =

"Server=(local);Database=huli;Integrated Security=sspi";

SqlCommand sqlCommand = new SqlCommand();                                                       

  sqlCommand.Connection = sqlConnection;                                                          

 sqlCommand.CommandText =                                                                        "SELECT distinct keshi as type FROM tb_patient;"                                                            

 + "select distinct * from tb_patient";

//用此种方法可查询一张表中的关系

 sqlDataAdapter.SelectCommand = sqlCommand;                                                      

 DataSet dataSet = new DataSet();                                                               

 sqlConnection.Open();                                                                           

 sqlDataAdapter.Fill(dataSet);                                                                   

 sqlConnection.Close();                                                                          

 DataTable departmentTable = dataSet.Tables[0];                                                  

 DataTable de = dataSet.Tables[1];                                                    

 DataRelation[] dataRelations =                                                                  

 {

 new DataRelation                                                                            

       ("keshi_patient"                                                                     

       ,departmentTable.Columns["type"]                    

       , de.Columns["keshi"]                                                    

       , false)                                                                                

 };

 dataSet.Relations.AddRange(dataRelations);                                                      

 this.trv_EducationUnit.Nodes.Clear();                                                           

 foreach (DataRow departmentRow in departmentTable.Rows)                                        

{

TreeNode departmentNode = new TreeNode();                                                   

departmentNode.Text = departmentRow["type"].ToString();                                                  this.trv_EducationUnit.Nodes.Add(departmentNode);                                           

 foreach (DataRow majorRow in departmentRow.GetChildRows("keshi_patient"))               

 {

 TreeNode majorNode = new TreeNode();                                                    

majorNode.Text = majorRow["username"].ToString();

majorNode.Tag = majorRow["userid"];                   departmentNode.Nodes.Add(majorNode);                                                    

  }

 }

运行效果图: