iT邦幫忙

DAY 27
1

給學弟的ASP.NET網頁學習經驗系列 第 27

ASP.NET學習經驗#27----瞭解ADO.NET,常用的DataSet與DataReader

ADO.NET究竟為何物?

全名:ADO.NET(ActiveX Data Objects .NET)
簡單來說就是在.NET平台上,專門用以存取後端資料庫與進行資料操作的技術!!!!

更多介紹與解釋:ADO.NET 概觀

ADO.NET技術來取存資料庫,通常有兩種方式

1.精靈化的方式:平常我們在工具箱裡使用『資料』的控制項

透過精靈的選擇、拖曳、設定等方式就已經是在使用ADO.NET,快速且簡單

2.程式化的方式:透過Provider建立資料庫連接後選擇使用DataReader讀取、

使用DataSet操作與其他ExecuteNotQuery、ExecuteScalar執行方式,

全部透過程式一行一行編寫,功能與彈性較自由

SqlDataSourse其實就是被包裝過的DataSet...(屬性DataSourceMode預設就是DataSet)

精靈操作已經在前面文章已經使用很多次,今天主要來學習DataReader與大主角DataSet!

基本步驟:

1.Connect ─於資料庫之間建立起連結管道。

2.Command─下達SQL指令。

3.Execute─通知資料庫執行先前所下達之SQL指令,並回傳資料。

4.Close─關閉與資料庫之間的連結管道。

DataReader:一個簡單的資料流,提供順向唯讀的查看方式來使用裡面的資料,

就像個指標一樣在資料庫裡讀取資料直到執行結束連線關閉,不會占用大量記憶體較省資源

大概的用法就是:

protected void Page_Load(object sender, EventArgs e)
{
    using (SqlConnection nowConnection = new SqlConnection(strConnection))//使用連接字串初始SqlConnection物件連接資料庫
    {
        nowConnection.Open();//開啟連線
        using (SqlCommand command = new SqlCommand())
        {
            command.CommandText = "SQL";
            command.Connection = nowConnection;//資料庫連接
            SqlDataReader dr = command.ExecuteReader();//執行並回傳DataReader
            if (dr.HasRows)//檢查是否有資料列
            {
                while (dr.Read())//嘗試讀取一筆資料列,並且回傳是否成功
                {
                    WriteRow((IDataRecord)dr);//使用資料列
                }
            }
        }
    }
}
        
private void WriteRow(IDataRecord record)
{
            
    HyperLink hl = new HyperLink();
    hl.Text = record["Title"].ToString();//資料列集合中的資料
    hl.ToolTip = record["Content"].ToString();

    gv.Rows[4].Cells[1].Controls.Add(hl);
}

DataSet:ADO.NET的大魔王核心,它就是儲存在記憶中的一份資料庫複本,所以具有離線且可獨立自由來回操作的性質

等到需要時再傳回資料庫做更新,裡頭內涵就像是XML的資料模型,不只包含資料本身、甚至是多表的關聯。

基本用法:

DataSet ds;
SqlConnection nowConnection = new SqlConnection(strConnection)//使用連接字串初始SqlConnection物件連接資料庫
SqlCommand command = new SqlCommand("SQL指令", nowConnection);

SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(command);
//傳入的是select字串:sqlDataAdapter.SelectCommand=new SqlCommand("SQL")
sqlDataAdapter.Fill(ds);

foreach (DataRow dr in ds.Tables["指定資料表"].Rows)
{
    //這樣就可以自由檢索每個資料列內容
}

//如果要新增一筆資料
DataRow newDr = ds.Tables["資料表"].NewRow();
newDr["title"]="鐵人";
ds.Tables["資料表"].Rows.Add(newDr);

sqlDataAdapter.InsertCommand="SQL";//要記得寫好Insert指令

sqlDataAdapter.Update(ds,"指定資料表");

還有很多操作方式.....

各有各的好處,雖然DataSet很強大,但殺雞焉用牛刀,資料過大量時還會占用太多記憶體!


上一篇
ASP.NET學習經驗#26----var到底代表??好想直接擴充想要的功能??
下一篇
ASP.NET學習經驗#28----檢查字串的內容??Regular Expression初學
系列文
給學弟的ASP.NET網頁學習經驗30

1 則留言

0
mis2000lab
iT邦好手 1 級 ‧ 2014-10-13 21:37:09

我在網路上蒐集到的幾篇比較文
希望對大家有幫助,整理如下

Web Form為求快速,可使用 DataReader直接處理資料來源
http://www.dotblogs.com.tw/mis2000lab/archive/2012/01/13/dataset\_datareader\_20120113.aspx

Ben iT邦新手 3 級 ‧ 2014-10-13 22:37:19 檢舉

謝謝前輩總是替我做一些補充,真的幫助我很多學習的不足!!!!!

我要留言

立即登入留言