【www.gdgbn.com--php与数据库】

asp教程.net dataset,datatable,dateview的关系和用法
ataset就是一个临时的小仓库,通过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][“列名字”]

 

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.gdgbn.com/jiaocheng/29281/