專案開發中,大多數開發人員的核心工作就是如何對資料進行儲存及訪問。為了進行資料操作,我們首先得解決幾個基本問題:
1、如何與乙個資料庫建立連線。
2、如何從資料庫讀取相應的資料。
3、如何對資料表進行增改操作。
.net中,ado.net很方便的解決了上面三個問題,我們可以使用dbconnection進行連線,dataset進行資料儲存,dataadapter進行資料更新。先看一段**:
//建立dbconnection物件連線資料庫
sqlconnection conn
=new
sqlconnection();
conn.connectionstring ="
server=.;uid=sa;password=123456; database=data_base; max pool size=300;";
//建立dataadapter、command物件,讀取資料
sqldataadapter da
=new
sqldataadapter();
sqlcommand cmd
=new
sqlcommand();
cmd.connection
=conn;
cmd.commandtext ="
select * from test";
da.selectcommand
=cmd;
//建立dataset物件,儲存資料,建立與物理表的對映
dataset ds
=new
dataset();
da.fill(ds,
"test");
上述**實現對資料庫「data_base」中「test」表資料讀取,並用dataset時行儲存。
既然讀出了test表中的資料,接下來要解決的就是如何對test表進行增、刪、改操作。
為實現增、刪、改操作,需要為dataadapter指定insertcommand、deletecommand以及updatecommand,並為每個command物件繫結引數:
//新增資料
cmd
=new
sqlcommand();
cmd.connection
=conn;
cmd.commandtext ="
insert into test (id, name, val) values (@id, @name, @val)";
sqlparameter param
=new
sqlparameter(
"@id",
null
);param.sourcecolumn ="
id";cmd.parameters.add(param);
param
=new
sqlparameter(
"@name",
null
);param.sourcecolumn ="
name";
cmd.parameters.add(param);
param
=new
sqlparameter(
"@val",
null
);param.sourcecolumn ="
val"
;cmd.parameters.add(param);
da.insertcommand
=cmd;
//修改資料
cmd
=new
sqlcommand();
cmd.connection
=conn;
cmd.commandtext ="
update test set name = @name, val = @val where id = @id";
param
=new
sqlparameter(
"@id",
null
);param.sourcecolumn ="
id";cmd.parameters.add(param);
param
=new
sqlparameter(
"@name",
null
);param.sourcecolumn ="
name";
cmd.parameters.add(param);
param
=new
sqlparameter(
"@val",
null
);param.sourcecolumn ="
val"
;cmd.parameters.add(param);
da.updatecommand
=cmd;
//刪除資料
cmd
=new
sqlcommand();
cmd.connection
=conn;
cmd.commandtext ="
delete from test where id = @id";
param
=new
sqlparameter(
"@id",
null
);param.sourcecolumn ="
id";cmd.parameters.add(param);
da.deletecommand
=cmd;
完成準備工作後,利用datatable進行資料操作:
datatable dt=ds.tables[
"test"];
dt.primarykey
=new
datacolumn ;
dt.rows.add(
newobject
", datetime.now),
string
.format(
"測試值:
", datetime.now)
});datarow dr
=dt.rows.find(
"f8dc2c64-f51a-4e99-bde1-a20069b09c3a");
if(dr
!=null)"
, datetime.now);
}dr
=dt.rows.find(
"ed7d079b-81ec-4ba4-bf85-688621e495e7");
if(dr
!=null
)
最後呼叫dataadapter的update方法儲存變更後的資料:
da.update(ds, "test");
利用ado.net的上述方法,我們已經完成了對資料庫的完整操作。
注:上述**是利用dataadapter對資料庫進行讀寫的基本原理,非常重要,我們後面的改造都將以此作為依據。
雖然我們已經能完成對資料的操作,但現實際上還是存在很多問題:
1、我們只是對mssql資料庫進行操作,如果要對oracle或mysql進行操作我們得定義新的oracle或mysql資料物件,如果能由系統自動判斷操作的資料庫型別,我們就能省去對資料物件的關注。
2、我們做了太多的準備工作,我們只對一張表進行操作,如查我們要對多張表進行操作,引數又很多,實際上會產生大量的重複**,我們得考慮消除這些**。
對於上述問題,如果我們自己實現乙個資料訪問層,對ado.net物件進行封裝,只關注實際的資料的操作,而不關注系統是如何與資料庫進行連線、如何進行引數傳遞,那我們的需求就算基本滿足了。
我們可以先進行假設,需要達成如下效果,以偽碼的形式給出:
"test
", ds);
設定對映物件更新命令:map.setcommands(insert
|update
|delete, ds);
datatable進行實際增、刪、改操作。
資料執行者執行最後的變更操作:execobj.update(ds);
後面我將一步步看到上述假設是如何實現的。
資料訪問層
using system.collections.generic using system.data using system.data.common namespace adonetdataaccess.core.contract 上面的介面包括增刪改查,批量插入以及 資料庫連線物件的連線和關閉等...
資料訪問層
1 資料持久化 持久化是將程式中資料在瞬時狀態和持久狀態間轉換的機制。jdbc是一種持久化機制,將程式直接儲存成文字檔案也是持久化機制的一種實現。2 資料訪問模式 dao模式 dao dataaccessobjects,資料儲存物件 是指位於業務邏輯和持久化資料之間實現實現對持久化資料的訪問。dao...
資料訪問層
資料訪問層 一.持久化 是將程式中的資料在瞬間狀態和持久狀態間轉換的機制 二.主要持久化操作 1.儲存 2.刪除 3.修改 4.讀取 5.查詢 等 三.dao dataaccessobjects,資料儲存物件 指位於業務邏輯和持久化資料之間實現對持久化資料的訪問。四.dao模式的優勢 1.隔離了資料...