接着上次学习了ado.net数据提供对象部分,来学习用户操作部分,主要是关于DataSet的操作。

DateSet是ado.net核心,所有对数据的复杂操作都是使用它,DataSet包含一组DataTabel对象,他们表示所操作的数据表,每个DataTable都有两个子对象包含DataRow和DataColumn表示数据的行和列。

下面是一段代码用DataSet实现读取数据和更新数据

 

 
  
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Data.SqlClient;  
  5. using System.Data;  
  6. using System.Text;  
  7.  
  8. namespace dataset  
  9. {  
  10.     class Program  
  11.     {  
  12.         /// <summary>  
  13.         /// dataset学习  
  14.         /// </summary>  
  15.         /// 天行健    博客  
  16.         /// <param name="args"></param>  
  17.         static void Main(string[] args)  
  18.         {  
  19.             ///******************  
  20.             ///  
  21.             ///      天行健      
  22.             ///        
  23.             ///******************  
  24.               
  25.             //读取表中的数据  
  26.             using (SqlConnection conn = new SqlConnection(@"data source=.\sqlexpress; database=Myoffice;user id=sa;password=123"))//连接数据库  
  27.             {  
  28.                 string sql = "select Name,Age,Pay from Infor";  
  29.                 SqlDataAdapter thisAdapter= new SqlDataAdapter(sql,conn);//建立sqlDataAdapter对象  
  30.                 DataSet ds = new DataSet();//创建要填充数据的DataSet  
  31.                 thisAdapter.Fill(ds,"Infor");//利用thisAdapter对象,在DataSet中创建Infor填充对象,并执行填充  
  32.                 foreach (DataRow dr in ds.Tables["Infor"].Rows)//遍历DataSet对象  
  33.                 {  
  34.                     Console.WriteLine(dr["Name"]+"\t"+dr["Age"]+"\t"+dr["Pay"]);  
  35.                 }  
  36.                 ds.Clear();  
  37.                 Console.WriteLine("Program finished!");  
  38.             //更新数据表  
  39.                 Console.WriteLine("Now we will show update skills!");  
  40.                 SqlCommandBuilder thisbuilder = new SqlCommandBuilder(thisAdapter);//创建CommBuilder对象,建立sql命令;负责生成更新数据的sql语句,而不要自己创建这个语句  
  41.                 DataSet thisDataSet = new DataSet();//创建要填充的数据对象DataSet  
  42.                 thisAdapter.Fill(thisDataSet,"table");//填充dataset对象  
  43.                 Console.WriteLine("Name before change:{0}",thisDataSet.Tables["table"].Rows[3]["Name"]);  
  44.                 thisDataSet.Tables["table"].Rows[3]["Name"] = "Hen";//更改数据  
  45.                 thisAdapter.Update(ds,"Infor");//执行更新操作  
  46.                 ///SqlDataAdapter.Update这个方法遍历DataTabe中的行,以找到需要对数据库做出的变动。  
  47.                 ///Rows集合的每个DataRow对象都具有属性RowState,可以跟踪此行是否已删除、添加、修改,还是没有变动。反馈到数据库  
  48.                 Console.WriteLine("Name after change:{0}",thisDataSet.Tables["table"].Rows[3]["Name"]);   
  49.                 thisDataSet.Clear();  
  50.                 Console.WriteLine("Updata finished!");  
  51.  
  52.                 Console.ReadLine();              
  53.                   
  54.             }  
  55.              
  56.             Console.ReadKey();  
  57.  
  58.  
  59.         }  
  60.     }  
执行结果如下:

下面是执行结果

 

 

执行了DataSet的基本操作,下面是用DataSet执行对行的操作

 

 
  
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using System.Data.SqlClient;  
  6. using System.Data;  
  7. namespace dataset2  
  8. {  
  9.     class Program  
  10.     {  
  11.         static void Main(string[] args)  
  12.         {  
  13.             ///****************************  
  14.             ///  
  15.             ///            天行健  
  16.             ///              
  17.             ///*****************************  
  18.             using(SqlConnection conn=new SqlConnection(@"data source=.\sqlexpress;database=Myoffice;user id=sa;password=123"))  
  19.             {  
  20.                 //添加行操作  
  21.                 SqlDataAdapter thisAdapter = new SqlDataAdapter("Select * from Infor",conn);  
  22.                 SqlCommandBuilder thisBuilder = new SqlCommandBuilder(thisAdapter);  
  23.                 DataSet thisdataSet = new DataSet();  
  24.                 thisAdapter.Fill(thisdataSet,"Table");  
  25.                 Console.WriteLine("Rows after change:{0}", thisdataSet.Tables["Table"].Rows.Count);  
  26.                 DataRow thisRow = thisdataSet.Tables["Table"].NewRow();//创建新行对象  
  27.                  
  28.                 thisRow["Id"] =  System.Guid.NewGuid();//获取guid算法值  
  29.                 thisRow["Name"] = "Gerr";  
  30.                 thisRow["Age"] = 27;  
  31.                 thisRow["Pay"] = 1200;  
  32.                 thisdataSet.Tables["Table"].Rows.Add(thisRow);  
  33.                 Console.WriteLine("Rows after change:{0}",thisdataSet.Tables["Table"].Rows.Count);  
  34.                 thisAdapter.Update(thisdataSet,"Table");  
  35.                 ///dataset只是在内存中的数据,dataAdapter负责连接到磁盘上的数据库中,需要调用Update方法才能同步到数据库  
  36.                   
  37.                 thisdataSet.Clear();  
  38.                 Console.WriteLine("Finished!");  
  39.                 //查找行操作  
  40.                 SqlDataAdapter SelectAdapter = new SqlDataAdapter("Select * from Infor",conn);  
  41.                 SqlCommandBuilder SelectBuilt = new SqlCommandBuilder(SelectAdapter);  
  42.                 DataSet SelectDateSet = new DataSet();  
  43.                   
  44.                 thisAdapter.Fill(SelectDateSet,"Table");  
  45.                 //使用find之前,构建主键  
  46.                 DataColumn[] keys = new DataColumn[1];  
  47.                 keys[0] = SelectDateSet.Tables["Table"].Columns["Id"];  
  48.                 SelectDateSet.Tables["Table"].PrimaryKey = keys;  
  49.                 DataRow dr = SelectDateSet.Tables["Table"].Rows.Find("add4d8a6-0c99-4ad7-9628-2a6e548a6d73");  
  50.                 if (dr != null)  
  51.                 {  
  52.                     Console.WriteLine("Find!");  
  53.                     //删除行操作  
  54.                     Console.WriteLine("Removing.....");  
  55.                     dr.Delete();  
  56.                     SelectAdapter.Update(SelectDateSet,"Table");  
  57.                     Console.WriteLine("Removed!");  
  58.                 }  
  59.                 else 
  60.                 {  
  61.                     Console.WriteLine("Not Find");  
  62.                 }  
  63.                 SelectDateSet.Clear();  
  64.                 Console.WriteLine("Finished!");  
  65.                 Console.ReadLine();  
  66.  
  67.             }  
  68.         }  
  69.     }  
  70. }  

执行结果:

 

 

一些基本讲解都在源码里,这些都是比较简单的东西,仅供菜鸟学习交流啊。呵呵。。。

下一次是关于ado.net多表的操作和关于读写xml内容。。。。。