ASP.NET从入门到精通笔记第9章-使用DataSet和DataAdapter对象

DataSet对象是ADO.NET的中心概念,它独立于各种数据源.是支持断开式,分布式的核心对象.DataSet对象包含任意多个表,每个DataSet中的数据表对应于一个数据源中的数据表.

DataSet可利用DataAdapter填充.

DataAdapter对象是DataSet和数据库之间的桥梁.主要是从数据源中检索数据,然后填充到DataSet对象中..Net中主要有两种DataAdapter对象,OleDataAdapter和SqlDataAdapter.

DataSet和DataAdapter配合使用的大致过程是:

SqlDataAdapter myDa = new SqlDataAdapter(SqlStr, MyCon);//建立DataAdapter对象,SqlStr是一个查询语句,MyCon是一个数据库连接

DataSet myDs = new DataSet();

myDa.Fill(myDs);//填充DataSet对象

下面是使用DataSet和DataAdapter对象的一个具体例子.

显示Music数据源中的条目,如果名字过长,用省略号代替.

思路为.新建DataSet对象,用DataAdapter对象查询结果并且填充DadaSet对象,修改DataSet对象的表.然后和GridView绑定以显示数据.

首先在SqlServer中准备好我们的数据库,名字为Music,表名为catalog.两列分别为id int和name nvarchar.

新建网站,添加一个web窗体

在web窗体中添加一个GredView控件,名字为GridView1.

在web.config中添加连接字符串

<appSettings>
		<add key="ConnectString" value="server=localhost;database=Music;UId=sa;password=1"/>
</appSettings>

在Default.aspx.cs中

添加三个命名空间

using System.Data.SqlClient;
using System.Configuration;
using System.Data;

新建一个GetConnection方法,使用ConfigurationManager获取web.config中的连接字符串

    public SqlConnection GetConnection()
    {
        string MyStr = ConfigurationManager.AppSettings["ConnectString"].ToString();
        SqlConnection MyCon = new SqlConnection(MyStr);
        return MyCon;
    }
新建一个SubStr函数,用于把超过一定长度的字符串用省略号显示
    public string SubStr(string sString, int nLeng)
    {
        if (sString.Length <= nLeng)
        {
            return sString;
        }
        string sNewStr = sString.Substring(0, nLeng);
        sNewStr = sNewStr + "...";
        return sNewStr;
    }

在PageLoad事件中,添加如下代码

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            SqlConnection MyCon = GetConnection();
            MyCon.Open();
            string SqlStr = "select * from catalog";
            SqlDataAdapter myDa = new SqlDataAdapter(SqlStr, MyCon);
            DataSet myDs = new DataSet();
            myDa.Fill(myDs);
            for (int i = 0; i <= myDs.Tables[0].Rows.Count - 1; i++)
            {
                myDs.Tables[0].Rows[i]["name"] =
                    SubStr(Convert.ToString(myDs.Tables[0].Rows[i]["name"]), 5);
            }
            GridView1.DataSource = myDs;
            GridView1.DataKeyNames = new string[] { "id" };//id为数据库中的主键
            GridView1.DataBind();
        }

    }

运行,打开的网页如下

idname
1ji...
2ha...
3gg...
6my...

总结:

1.GridView对象的使用目前遇到两种方法,一种是在控件上直接选择数据源,可以实现和数据源的自动绑定.

另一种就是本例子中的方法,实现和DataSet的绑定,这样的目的是从数据源获取数据后,可以对数据进行一些处理,然后在现实在GridView中.代码如下

GridView1.DataSource = myDs;
GridView1.DataKeyNames = new string[] { "id" };//"id"和数据源中的列名应该一致
GridView1.DataBind();

2.本例中DataSet对象的使用为

myDs.Tables[0].Rows[i]["name"]

如果在填充时指定fill的第二个参数(给这个虚拟表的一个名字)

myDa.Fill(myDs,"catalog");

则可以通过表名调用,而不必用下标,这样避免忘了是哪个下标

myDs.Tables["catalog"].Rows[i]["name"]


示例的创建过程编写后又经过亲测,按照步骤一步步就可以成功运行,如果差错,请不吝指正.


补充:

使用DataSet中的数据更新数据库

通过DataAdapter对象创建SqlCommandBuilder对象,再使用DataAdapter.Update,即可由SqlCommandBuilder对象自动生成INSERT,UPDATE或DELETE命令

要求DataSet中的数据必须至少存在一个主键列或唯一的列

在上述示例中,把Pageload中的代码替换成如下代码,即可实现DataSet修改后更新到数据库中.

        if (!IsPostBack)
        {
            SqlConnection MyCon = GetConnection();
            MyCon.Open();
            string SqlStr = "select * from catalog";
            SqlDataAdapter myDa = new SqlDataAdapter(SqlStr, MyCon);
            DataSet myDs = new DataSet();
            SqlCommandBuilder builder = new SqlCommandBuilder(myDa);//使用SqlCommandBuilder对象
            myDa.Fill(myDs, "id");
            for (int i = 0; i <= myDs.Tables[0].Rows.Count - 1; i++)
            {
                myDs.Tables["id"].Rows[i]["name"] =
                    SubStr(Convert.ToString(myDs.Tables["id"].Rows[i]["name"]),2);
            }
            myDa.Update(myDs, "id");
            GridView1.DataSource = myDs;
            GridView1.DataKeyNames = new string[] { "id" };
            GridView1.DataBind();
            myDa.Dispose();
            myDs.Dispose();
            MyCon.Close();
        }

运行后去SqlServer中查看,数据库中的内容也被更新了,关键语句如下

            SqlCommandBuilder builder = new SqlCommandBuilder(myDa);//使用SqlCommandBuilder对象
            myDa.Fill(myDs, "id");
            myDa.Update(myDs, "id");//更新


 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值