zoukankan      html  css  js  c++  java
  • ADO.NET笔记——使用DataSet返回数据

    相关知识:

    1. DataSet和DataAdapter的内部结构:
      •   
      • DataSet通过DataAdapter从数据库中获取数据
      • DataSet对象内部包括一个集合(Tables),也就是可以拥有多个表(DataTables);每个表存放着从数据库放回的一个结果集(一般由一条SELECT语句产生一个结果集)
      • DataTable对象包含一个行集合(Rows),集合中的每个元素都是一个DataRow类型的对象。DataRow提供了通过下标或者列名进行访问字段数据的操作
      • DataTable对象还包含一个列集合(Columns),集合中的每个元素都是一个DataColumn类型的对象,用于代表查询结果集合中每一列的属性,例如名称、数据类型等
      • DataSet对象包含一个关联集合(Relations),集合中的每一个DataRelation代表两个表之间的关联。请注意,数据库表之间的关联不会被自动带到DataSet中来,需要变成为DataSet中的SataTable建立关联
      • 可以由DataTable创建(DataView),DataView可以用来代表DataTable中经过过滤后的数据,并且将用来绑定到数据展现控件中
    2. 连接的打开和关闭
      • 与SqlDataReader不用,使用DataAdapter对象,把数据加载到DataSet中,并不需要显式打开和关闭连接
      • 当调用DataAdapter的Fill函数时,该函数内部首先检查连接对象是否已经打开
        • 如果没有打开,则打开链接,填充数据,然后关闭连接
        • 如果已经打开,则直接填充数据,之后也不关闭连接
      • 一旦数据已经填充到DataSet中,就不必与数据库继续保持连接。事实上,DataSet中的数据全在内存中,与数据库无关。

    代码示例:

    (示例数据库使用红皮书的示例数据库:AdventureWorks_WroxSSRS2012)

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 using System.Data;
     7 using System.Data.SqlClient;
     8 
     9 namespace ConsoleApplication10
    10 {
    11     class Program
    12     {
    13         static void Main(string[] args)
    14         {
    15             string strConn = @"server=Joe-PC;database=AdventureWorks_WroxSSRS2012;uid=sa;pwd=root";
    16             SqlConnection conn = new SqlConnection(strConn);
    17 
    18             DataSet ds = new DataSet();
    19 
    20             string strCmd1 = "SELECT ProductCategoryID,Name FROM Production.ProductCategory";
    21             SqlDataAdapter da1 = new SqlDataAdapter(strCmd1, conn);
    22             // 将第一个查询结果集合填入DataSet中,并且将DataTable命名为"Category"
    23             da1.Fill(ds, "Category");
    24 
    25             string strCmd2 = "SELECT ProductSubcategoryID,ProductCategoryID,Name From Production.ProductSubcategory";
    26             SqlDataAdapter da2 = new SqlDataAdapter(strCmd2, conn);
    27             // 将第二个查询结果集合填入DataSet中,并且将DataTable命名为"Subategory"
    28             da2.Fill(ds, "Subcategory");
    29 
    30             // 使用视图
    31             // 打印表中的数据
    32             Console.WriteLine("主类别表:");
    33             DataTable dt1 = ds.Tables["Category"];//获得Category表
    34             DataView dv1 = new DataView(dt1); //创建视图
    35             dv1.Sort = "ProductCategoryID ASC"; //设置排序规则
    36             foreach (DataRowView drv in dv1)
    37             {
    38                 Console.WriteLine("{0}:{1}", drv[0], drv["Name"]);
    39             }
    40 
    41             Console.WriteLine("");
    42 
    43             Console.WriteLine("过滤后的子类别表:");
    44             DataTable dt2 = ds.Tables["Subcategory"];
    45             DataView dv2 = new DataView(dt2);
    46             dv2.RowFilter = "ProductSubcategoryID>10";//设置过滤条件
    47             dv2.Sort = "ProductSubcategoryID ASC";
    48             foreach (DataRowView drv in dv2)
    49             {
    50                 Console.WriteLine("{0}:{1}", drv[0], drv["Name"]);
    51             }
    52 
    53             Console.WriteLine("");
    54 
    55             // 在两个表之间建立关联
    56             DataRelation relation = new DataRelation("ProductCategory_ProductSubcategory",
    57                 dt1.Columns["ProductCategoryID"], dt2.Columns["ProductCategoryID"]);
    58             ds.Relations.Add(relation);//将关联添加到DataSet的集合中
    59             try
    60             {
    61                 for (int i = 0; i < dt1.Rows.Count; i++)
    62                 {
    63                     DataRow dri = dt1.Rows[i];
    64                     //根据关联找到数据相关的子类别数据
    65                     DataRow[] subRows = dri.GetChildRows(relation);
    66                     Console.WriteLine("{0}的子类别信息:", dri["Name"]);
    67                     foreach (DataRow dr in subRows)
    68                     {
    69                         Console.WriteLine("{0}:{1}", dr[0], dr["Name"]);
    70                     }
    71                     Console.WriteLine("");
    72                 }
    73             }
    74             catch (Exception e)
    75             {
    76                 Console.WriteLine(e);
    77             }
    78         }
    79     }
    80 }
    View Code
  • 相关阅读:
    oracle 10g 免安装客户端在windows下配置
    sql2005 sa密码
    使用windows live writer 有感
    windows xp SNMP安装包提取
    汉化groove2007
    迁移SQL server 2005 Reporting Services到SQL server 2008 Reporting Services全程截图操作指南
    foxmail 6在使用中的问题
    AGPM客户端连接不上服务器解决一例
    SpringSource Tool Suite add CloudFoundry service
    Java 之 SWing
  • 原文地址:https://www.cnblogs.com/chenguangqiao/p/4354494.html
Copyright © 2011-2022 走看看