2018年11月12日星期一
ADO.Net中DataSet的應用
一:什麼是DataSet?
DataSet是ADO.NET的中心概念。可以把DataSet當成內存中的數據庫,DataSet是不依賴於數據庫的獨立數據集合。所謂獨立,就是説,即使斷開數據鏈路,或者關閉數據庫,DataSet依然是可用的.
二:DataSet特點
1) 獨立性。DataSet獨立於各種數據源,可以處理脱機數據,在多層應用程序中很有用.
(2) 離線(斷開)和連接,即允許在任何時候查看DataSet中任意行的內容,允許修改查詢結果的方法。。
(3) XML的完整性,即DataSet對象是一個可以用XML形式表示的數據視圖,是一種數據關係視圖。
三:DataSet與DataReader的關係
是ADO.NET開發人員為方便數據處理開發出來的,是數據的集合,是為解決DataReader的缺陷設計的,DataReader數據處理速度快,但 它是隻讀的,而且一旦移到下一行,就不能查看上一行的數據,DataSet則可以自由移動指針。
四:DataTable和DataSet區別
包含很多個DataTable: 一張表的時候用DataTable就可以,多張表就用DataSet了(datatable是一張表,dataset是表的集合。)
可以認為DataSet就是一個數據庫,DataTable就是數據庫裏的表。
五:思維導圖
六:DataSet使用方法
(1)把數據庫中的數據通過DataAdapter對象填充DataSet。
例:在此例中,我將使用DataAdapter填充DataSet。如下列代碼中的黃線部分。
bool dd = true;
try
{
sqlCommand.ExecuteNonQuery();
}
catch
{
dd = false;
查詢失敗!該患者不存在!");
}
if(dd)
{
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = sqlCommand;
DataSet d = new DataSet();
da.Fill(d);
int b = d.Tables[0].Rows.Count;
if (b > 0)
{
label41.Text = d.Tables[0].Rows[0]["yi"].ToString();
label40.Text = d.Tables[0].Rows[0]["er"].ToString();
label39.Text = d.Tables[0].Rows[0]["san"].ToString();
label38.Text = d.Tables[0].Rows[0]["si"].ToString();
}
操作成功後,在每個label框中都會顯現對應的數據。
(2)使用DataSet填充樹形菜單
代碼:
SqlConnection sqlConnection = new SqlConnection();
sqlConnection.ConnectionString =
"Server=(local);Database=huli;Integrated Security=sspi";
SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText = "SELECT distinct keshi as type FROM tb_patient;"
+ "select distinct * from tb_patient";
//用此種方法可查詢一張表中的關係
sqlDataAdapter.SelectCommand = sqlCommand;
DataSet dataSet = new DataSet();
sqlConnection.Open();
sqlDataAdapter.Fill(dataSet);
sqlConnection.Close();
DataTable departmentTable = dataSet.Tables[0];
DataTable de = dataSet.Tables[1];
DataRelation[] dataRelations =
{
new DataRelation
("keshi_patient"
,departmentTable.Columns["type"]
, de.Columns["keshi"]
, false)
};
dataSet.Relations.AddRange(dataRelations);
this.trv_EducationUnit.Nodes.Clear();
foreach (DataRow departmentRow in departmentTable.Rows)
{
TreeNode departmentNode = new TreeNode();
departmentNode.Text = departmentRow["type"].ToString(); this.trv_EducationUnit.Nodes.Add(departmentNode);
foreach (DataRow majorRow in departmentRow.GetChildRows("keshi_patient"))
{
TreeNode majorNode = new TreeNode();
majorNode.Text = majorRow["username"].ToString();
majorNode.Tag = majorRow["userid"]; departmentNode.Nodes.Add(majorNode);
}
}
運行效果圖: