1. 程式人生 > >型別化(Type)的DataSet (使用強型別的DataSet。定義的資料庫表一定要有主鍵,否則不能使用)

型別化(Type)的DataSet (使用強型別的DataSet。定義的資料庫表一定要有主鍵,否則不能使用)

使用強型別的DataSet的時候一定要設定主鍵,假如說你在拖一個表到資料集來建立強型別DataSet的時候 而那個表又沒有設定主鍵
那麼你只有在資料集裡把你拖入的那個表刪除,重新拖入。或者點選你拖入到資料集的那個表,把滑鼠移動到 "表名+TableAdapter"欄
其實也就就是倒數第二欄。點選右鍵,屬性->配置 然後點選完成就好了
假如說你將表拖入到資料集後,你又在資料庫表裡添加了某個欄位。那麼此時你在“配置”裡點選“查詢生成器”將你後來新增的那個欄位勾選上
然後點“完成”就好了。

//建立強型別DataSet,首先在你的專案名稱裡新增"新建項"選擇"資料集"資料集的預設名字為DataSet1。接著在visual studio的伺服器資源管理器連線資料庫,在資料連線的表裡面拖一個你需要的表(例如xs)到DataSet1資料集中,【當你要拖一個表到你新增的"資料集"中的時候,它的意思就是“請為我拖近進來的這個表建立強型別DataSet”】【注意,這個拖是拖的表的結構,資料並沒有拖過來】這時候就會自動給你生成一個類xsTableAdapter。類名是以你的表名開頭的,這裡我拖的是xs表,所以類名是以xs開頭的
        private void button6_Click(object sender, EventArgs e)
        {
            //TableAdapter 提供應用程式和資料庫之間的通訊。更具體地說,TableAdapter 連線到資料庫,執行查詢或儲存過程,並返回用返回資料填充的新資料表或是用返回資料填充現有的DataTable。TableAdapter 還用於將更新資料從應用程式傳送回資料庫。
            xsTableAdapter adapter = new xsTableAdapter();
            DataSet1.xsDataTable dt = adapter.GetData();//GetData()是返回一個用資料填充了的新的DataTable。然後給這個DataTable賦給dt
            
            //GetData()與Fill()的區別
            //如果我們已經有了一個DataTable了 我再想把資料填充到這個DataTable裡就用fill方法(fill方法一般是資料繫結用的比較多)如果沒有現有的DataTable 我直接就想得到這個資料,那麼就用GetData (GetData 內部會為你建立一個DataTable,然後用資料填充這個DataTable ,然後再把這個已經填充了資料的DataTable 返回給你 。如果你想你獲得這個DataTable ,那麼你在外部定義一個DataTable 型別的表來接收它就可以了)
            /*
            for (int i = 0; i < dt.Count; i++)//用for迴圈遍歷dt表的總行數。dt.Count表示 dt表的總行數
            {
                DataSet1.xsRow xsrow = dt[i]; //dt[i]是指dt表的第i行
                MessageBox.Show(xsrow.姓名.ToString()); //輸出所以行的姓名               
            }
            */


            DataSet1.xsRow rw = dt[0]; //取dt表的第一行(索引從0開始)。強型別DataSet使用方法不要rows。直接dt[0]
            //而弱型別的DataSet取行是這樣的:DataRow drow = dt.Rows[0]; //取得dt表中的第一行
            //MessageBox.Show(rw.姓名);  //輸出第一行的姓名值

            
            //***************************************強型別Datset的修改,並且更新。
            //將dt表的第1行的總學分修改為“50”-------------updata
            rw.專業名 = null; 
            adapter.Update(dt);
            MessageBox.Show("資料修改成功");
            
            
            //通過強型別DataSet插入一條資料到xs表------------insert
            
            adapter.Insert("001242","裡維斯","計算機",0,"2006-10-12",50,null);
            MessageBox.Show("資料插入成功");

            //--------------------------------------------自定義Delete----(當然你也可以自定義select insert)
            //因為adapter自己生成的預設adapter.Delete()不好用,那麼我們就自己來定義一個Delete()
            //在資料集裡找到你拖入進來的那個表,把滑鼠移動到表的最上方。右鍵->新增->查詢(Query)->使用SQL語句->下一步,這裡根據我們的需要我選擇了Delete(D)->下一步。然後再那個框框裡寫你自己的delete語句->下一步->根據自己需要重新命名一下方法名->完成。   呼叫方法如下
            //adapter.DeleteQuery學號("001242");

            //這時候我又根據上面的註釋建立一個select查詢,寫完select語句後,在命名方法名的時候,將填充DataTable方法命名為"Fill專業名"返回DataTable方法命名為"GetData專業名"。  那麼使用方法如下
            
            DataSet1.xsDataTable dt2 = adapter.GetData計算機(); //注意這裡呼叫的是我自己定義的GetData專業名方法名哦
            DataSet1.xsRow rw2 = dt2[dt2.Count-1];  //取得dt2表的最後一行(索引從0開始)
            MessageBox.Show(rw2.姓名);  //輸出dt表最後一行的姓名列
           

            //****************************************************強型別DataSet空值處理
            //假如資料庫裡xs表的第一行的“專業名”欄位值為NULL
            //MessageBox.Show(rw.專業名);//錯誤的取法,這樣取值的話就會報異常“表“xs”中列“專業名”的值為 DBNull。”
            //所我們只能這麼來取
            if (rw.Is專業名Null())
            {
                MessageBox.Show("專業名值為NULL");
            }
            else
            {
                MessageBox.Show(rw.專業名);
            }


        }

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using 可空型別.DataSet1TableAdapters;

namespace 可空型別

{

    class Program

    {

        static void Main(string[]args)

        {

            //強型別DataSet的使用。首先把Visual studio找到工具->連線資料庫。右鍵專案名稱新增新項->資料集,這裡預設的資料集名稱是

DataSet1.xsd。此時將伺服器資源管理器欄名下的資料連線裡面你需要的某個表(這裡是拖入的是T_user)拖入到DataSet1.xsd .這時就會自動生成一堆類其中就包含T_userTableAdapter。也就是表名+TableAdapter,表名+DataTable,表名+Row

            T_userTableAdapter adapter =new T_userTableAdapter();

            可空型別.DataSet1.T_userDataTable table = adapter.GetData();

            for(int

i = 0; i < table .Count; i++)//for迴圈遍歷table表的總行數。table.Count表示 table表的總行數

            {

                可空型別.DataSet1.T_userRow row = table[i]; //強型別DataSet使用方法不要rows。直接table[i]

                //DataSet1.T_userRowdw = table.Rows[1]; dw["name"] = "周泉"; //弱型別DataSet使用方法

                Console.WriteLine(row.name);

            }

            //下面嘗試一下強型別Datset的修改,並且更新。將table表的第2行的name修改為張三丰

            table[1].name = "鄧媛";

            //把更新的資料寫入資料庫表

            adapter.Update(table);

            Console.WriteLine("資料修改成功");

            Console.ReadKey();

        }

    }

}