zoukankan      html  css  js  c++  java
  • *********DataSet,DataTable,DateView的关系和用法************

    DataSet,DataTable,DateView的关系和用法

    DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不在依赖于数据库链路。

    DataSet就是一个临时的小仓库,通过sqlDataApert,可相当于卡车,将数据从数据库中通过适配器sqlDataApert放到DataSet中,所以即使断开了连接,也照样可以与数据库打交道,下面看一个例子:

    public static DataSet Query(string sqlstr)
          {
             using(OleDbConnection conn=new OleDbConnection(CONNSTR))
             {
                 try
                 {
                     DataSet ds = new DataSet()
                     OleDbDataAdapter da = new OleDbDataAdapter();
                     da.Fill(ds, "ds");
                     return ds;
                 }
                 catch (OleDbException e)
                 {
                     throw new Exception(e.Message);
                 }
             }
          }

    可以看出基本用法,通过OleDbDataAdapter的Fill方法将数据填充到DataSet中,其中

    da.Fill(ds, "ds"); 后面的ds是表明,因为DataSet中包含很多表,其实我们就是把数据添加到DataSet的表中,这个在后面会讲到,如果不写,则以索引0开始

    DataTable dt=ds.tables[“ds”]

    DataTable dt=ds.tables[0];

    下面我们有必要看看DataSet的组成部分

    DataSet有很多DataTable,DataTable中有很多的DataView

    DataTable中有很多的DataRow和DataColumn组成

    获得具体的值就是:

    Ds.tables[“表明”].Rows[0][“列名字”]

    复制代码
        DataTable dt = new DataTable();
            DataColumn numColumn = new DataColumn("num");
            dt.Columns.Add(numColumn);
            for (int i =0; i <5);i++)
            {
                DataRow row = sdt.NewRow();
                row["num"] = dt.Rows[i]["num"].ToString();
                dt.Rows.Add(row);
            }
    
    一般都是先创建行,在创建列,在列中添加内容
    复制代码

    DataView是显示出来的视图,比如我们要绑定到GirlView的数据源绑定中,为了显示,就用到了DataView

    DataView dv=new DataView();

    dv.table=ds.tables[“”]

    this.GirlView.DataSource=dv;

    或者使用DefaultView,这样就不用实例化DataView了;

    this.GirlView.DataSource= ds.tables[0].DefaultView;

    我们还可以DataView进行过滤

    ds.Tables[0].DefaultView.RowFilter = "id=1";

    或者

    DataView dv=new DataView();

    dv.RowFilter=”id=1”;

    DataSet的多表查询

    多表查询或者数据量很大的时候我们都可以使用DataSet,下面就看看使用DataSet如何进行多表查询,下面看个例子

    public static DataSet Query(string SQLString)
        {
            using (SqlConnection connection = new SqlConnection(connectionString))
            {
                DataSet ds = new DataSet();
                try
                {
                    connection.Open();
                    SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
                    command.Fill(ds, "ds");
                }
                catch (System.Data.SqlClient.SqlException ex)
                {
                    throw new Exception(ex.Message);
                }
                return ds;
            }
        }
    string citysql = "select * from soncity;select * from partytype";
     ds= DbHelperSQL.Query(citysql);
     s1.DataSource = ds.Tables[0].DefaultView;
     s1.DataTextField = "sonname";
     s1.DataBind();
     s2.DataSource = ds.Tables[1].DefaultView;
     s2.DataTextField = "partytypename";
    s2.DataBind();
    从上面我们可以看出如何进行多表查询了,sql语句可以写多个,用分号隔开就可以了
    string citysql = "select * from soncity;select * from partytype";
    返回的时候就是按着索引从0开始返回表格
     s1.DataSource = ds.Tables[0].DefaultView;
     s2.DataSource = ds.Tables[1].DefaultView;

    DataSet和sqlCommand的关系

    使用SqlDataAdapter 的时候不知道有没有想过这样的问题,为什么数据库不用打开直接就可以连接了呢?在这里我就来告诉大家原因:

      其实 数据库的连接是隐式的被打开的

    SqlDataAdapter  sqlDateAdapter = new SqlDataAdapter(sql语句,connection);

    其实它是隐式的替代了下面的代码:

    conn.Open();

                    SqlCommand cmd = new SqlCommand();

                    cmd.CommandText = "select * from googs";

                    cmd.CommandType = CommandType.Text;

                    cmd.Connection = conn;

                    SqlDataAdapter   sqlDateAdapter = new SqlDataAdapter();

                    sqlDateAdapter.SelectCommand = cmd;

    现在看出原因了吧!!

    http://www.cnblogs.com/shuang121/archive/2011/03/03/1970425.html

  • 相关阅读:
    玛里苟斯[清华集训2014 Day1]
    bzoj3585 mex
    Luogu 3793 由乃救爷爷
    Luogu5221 Product
    bzoj1834 [ZJOI2010]network 网络扩容
    CF650C Table Compression
    bzoj3211 花神游历各国
    bzoj1066 [SCOI2007]蜥蜴
    hdu2121 Ice_cream's world II
    Luogu2792 [JSOI2008]小店购物
  • 原文地址:https://www.cnblogs.com/YoungPop-Chen/p/3289053.html
Copyright © 2011-2022 走看看