型別化(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找到工具->連線資料庫。右鍵專案名稱新增新項->資料集,這裡預設的資料集名稱是
T_userTableAdapter adapter =new T_userTableAdapter();
可空型別.DataSet1.T_userDataTable table = adapter.GetData();
for(int
{
可空型別.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();
}
}
}