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;