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();
           
        }
    }

     

  • 相关阅读:
    微信支付-微信公众号支付,微信H5支付,微信APP支付,微信扫码支付
    微信公众号支付开发当前URL未注册解决办法
    程序员头像
    jQuery简单实现iframe的高度根据页面内容自适应的方法(转)
    MySQL大表优化方案 Mysql的row_format(fixed与dynamic)
    PHP 测试杂项
    【转】MySQL的学习--触发器
    MYSQL PROCEDURE 测试用例
    CSS好看的按钮
    表格可在线编辑效果
  • 原文地址:https://www.cnblogs.com/j0uz/p/3148445.html
Copyright © 2011-2022 走看看