zoukankan      html  css  js  c++  java
  • C# DataSet和DataTable

    DataSet:大家知道普通的数据库比如SQL 2000,ACCESS都是存放在电脑硬盘上的。DataSet简单的可以理解为存放在内存中的数据库,而它的数据从哪里来呢?就是用DataAdapter做桥梁从真正的数据库中获取,再用DataAdapter的Fill方法填充DataSet.

    DataTable:可以理解为DataSet的表,DataTable有DataRow和DataColumn,分别代表行和列,跟真正的数据库一样,DataSet可以有多个DataTable.DataSet是存放在内容中所以与数据库是断开的,这对于小量数据的处理很有优势,但对于大量数据不太适合.

    DataSetDataTable关系如下表:

     

     DataAdapter:在DataSet与源数据之间起到桥梁作用,它可以用Fill方法填充数据集(DataSet), 用Update方法向数据库提交存储在DataSet中的修改.

    下面我们来做个用Fill方法的简单例子:

    考虑到很多人可能没有装sql server,所以我们采用ACCESS数据库,其实用法都差不多.首先建立名为mydata的数据库,建一个名为student的表.

     

    往表中随意输入数据,比如

     

    建好后,把mydata数据库放到App_Data目录下.用VS新建一个网站,首页是default.aspx,进入default.aspx.cs写下如下代码:

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    using System.Data.OleDb;

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
           //定义连接字符串
            string connString = "Provider = Microsoft.Jet.OleDb.4.0;Data source = |DataDirectory|mydata.mdb";
            OleDbConnection conn = new OleDbConnection(connString);
            conn.Open();
            OleDbDataAdapter da = new OleDbDataAdapter("select * from student", conn);
            DataSet ds = new DataSet();
            da.Fill(ds, "student");
            //取得记录的行数,若=0,则说明没有数据
            if (ds.Tables["student"].Rows.Count == 0)
            {
                Response.Write("数据库中无数据");
            }
            else
            {
                for (int i = 0; i < ds.Tables["student"].Rows.Count; i++)
                {
                   //Rows[a][b]这里的a表示行,从0开始,b表示列,可以用数字表示,也可以直接用字段名
                    Response.Write(ds.Tables["student"].Rows[i]["name"]);
                    Response.Write(ds.Tables["student"].Rows[i]["score"]);
                    Response.Write("<br>");
                }
            }
            conn.Close();
        }
    }

    这段代码是读取student表中的数据,简单吧!

    ------------------------------------------------------------------------------------------------------------

    接下来我们来做个用Update方法的简单例子:

    使用Update方法自动遍历DataTable中的所有行,以检查需要对数据库作出的变动,它为每一发生更改的行调用Insert,Update或者Delete命令.

    它们之间的关系可以用下图表示:

     

    DataTable Rows集合的三个常用方法:

    Find方法:检索行
    Add方法:创建行
    Delete方法:删除行

    下面是例子,对于OleDbCommandBuilder的使用方法,请参考文章.OleDbCommandBuilder类

    复制代码

    using System;
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;

    using System.Data.OleDb;

    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            string connString = "Provider = Microsoft.Jet.OleDb.4.0;Data source = |DataDirectory|mydata.mdb";
            OleDbConnection conn = new OleDbConnection(connString);
            conn.Open();
            OleDbDataAdapter da = new OleDbDataAdapter("select * from student", conn);
            //定义cb为OleDbCommandBuilder对象
            OleDbCommandBuilder cb = new OleDbCommandBuilder(da);
            DataSet ds = new DataSet();
            da.Fill(ds, "student");

            #region 创建一个新的行
            DataRow dr = ds.Tables["student"].NewRow();
            dr["name"] = "小强";
            dr["score"] = "88";
            //把行加入DataSet的student表中
            ds.Tables["student"].Rows.Add(dr);
            #endregion

            //输出修改前的数据,此时access数据库没有插入,只在DataSet中更新
            Response.Write("修改之前的数据为:"+ds.Tables["student"].Rows[0][1].ToString()+ds.Tables["student"].Rows[0][2].ToString()+"<br>");

            #region 修改这个行
            ds.Tables["student"].Rows[0]["name"] = "小百";
            ds.Tables["student"].Rows[0]["score"] = "99";
            #endregion

            //输出修改后的数据
            Response.Write("修改之后的数据为:"+ds.Tables["student"].Rows[0][1].ToString() + ds.Tables["student"].Rows[0][2].ToString()+"<br>");

            #region 删除数据
            ds.Tables["student"].Rows[0].Delete();
            #endregion

            //用DataSet的Update方法插入Access数据库中
            da.Update(ds, "student");

            //关闭数据库连接
            conn.Close();
           
        }
    }

     

  • 相关阅读:
    线段树专辑—— pku 1436 Horizontally Visible Segments
    线段树专辑——pku 3667 Hotel
    线段树专辑——hdu 1540 Tunnel Warfare
    线段树专辑—— hdu 1828 Picture
    线段树专辑—— hdu 1542 Atlantis
    线段树专辑 —— pku 2482 Stars in Your Window
    线段树专辑 —— pku 3225 Help with Intervals
    线段树专辑—— hdu 1255 覆盖的面积
    线段树专辑—— hdu 3016 Man Down
    Ajax跨域访问
  • 原文地址:https://www.cnblogs.com/j0uz/p/3148445.html
Copyright © 2011-2022 走看看