這篇文章給大家介紹怎么在C#中將多張表存放到dataset中,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。成都創(chuàng)新互聯(lián)公司擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營(yíng)銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。在C#中用同一個(gè)dataset保存從數(shù)據(jù)庫(kù)中取出的多張表:
cmd.CommandText = "select * from table1;"; NpgsqlDataAdapter da = new NpgsqlDataAdapter(cmd); //實(shí)例化一個(gè)類,它用于連接C#與數(shù)據(jù)庫(kù),并執(zhí)行cmd語句且將結(jié)果緩存到適配器中 DataSet thedataset = new DataSet(); //實(shí)例化一個(gè)dataset,實(shí)例名為thedataset(通常被定義為ds) da.Fill(thedataset, "thetable1"); //將適配器中的內(nèi)容填充到dataset的thetable1表中, thetable1同時(shí)被建立 cmd.Parameters.Clear(); //清空cmd內(nèi)容,如果不清空下次使用時(shí)會(huì)拋出異常 cmd.CommandText = "select * from table2;"; da = new NpgsqlDataAdapter(cmd); da.Fill(thedataset, "thetable2"); //將適配器中的內(nèi)容填充到dataset的thetable2表中, thetable2同時(shí)被建立 cmd.Parameters.Clear(); //清空cmd內(nèi)容 ... int count = thedataset.Tables["thetable1"].Rows.Count; //獲取表thetable1的行數(shù) string a = thedataset.Tables["thetable2"].Rows[1][0].ToString().; //獲取表thetable2第2行第1列的值
補(bǔ)充:在DataSet中訪問多個(gè)表
ADO.Net模型有一個(gè)很大的優(yōu)點(diǎn),就是DataSet對(duì)象可以跟蹤多個(gè)表和它們之間的關(guān)系。這表示可以在一個(gè)操作的不同程序段之間傳遞完整的相關(guān)數(shù)據(jù)集,體系結(jié)構(gòu)內(nèi)在地維護(hù)數(shù)據(jù)之間關(guān)系的完整性。
ADO.Net中的DataRelation對(duì)象用于描述DataSet中的多個(gè)DataTables對(duì)象之間的關(guān)系。每個(gè)DataSet都包含DataRelations的Relations集合,以查找和操縱相關(guān)表。DataSet的Relations屬性是一個(gè)DataRelation對(duì)象的集合,DataRelation對(duì)象表示這個(gè)DataSet之間表之間的關(guān)系。要?jiǎng)?chuàng)建一個(gè)新的DataRelation,可以使用Relations的Add()方法,該方法接收表示關(guān)系的字符串名和兩個(gè)DataColumn(父列后跟子列)。比如:要?jiǎng)?chuàng)建Customers表的CustomerID列和Orders表的CustomerID列之間的關(guān)系 ,應(yīng)使用下面的語法,把它們的關(guān)系命名為CustOrders。
DataRelation custOrderRel = ds.Relations.Add("CustOrders", ds.Tables["Customers"].Columns["CustomerID"], ds.Tables["Orders"].Columns["CustomerID"]);
為了使用有關(guān)系,需要從一張表的行進(jìn)入另一張表的關(guān)聯(lián)行,這就是對(duì)關(guān)系導(dǎo)航。通常導(dǎo)航是指從一張表的父行進(jìn)入另一張表的子行。那么假如給定父表中的一行,如何獲取子表中與其對(duì)應(yīng)的所有行呢?我們可以使用DataRow對(duì)象的GetChildRows()方法提取這些行。示例:一個(gè)顧客(Customers)表包含有一個(gè)或多個(gè)訂單(Orders)表,建立這兩個(gè)表之間的數(shù)據(jù)并提取數(shù)據(jù)的代碼如下。
static void Main(string[] args) { string connStr = @"Data Source=.\SQLEXPRESS; AttachDbFilename='C:\SQL Sever 2000 Sample Databases\NORTHWND.MDF';Integrated Security=True;User Instance=true"; SqlConnection conn = new SqlConnection(connStr); conn.Open(); //創(chuàng)建用于保存修改的數(shù)據(jù)的適配器 SqlDataAdapter adapter = new SqlDataAdapter("select CustomerID,CompanyName from Customers", conn); SqlCommandBuilder builder = new SqlCommandBuilder(adapter); //創(chuàng)建數(shù)據(jù)集 DataSet ds = new DataSet(); //創(chuàng)建讀取Customers表的適配器 SqlDataAdapter custAdapter = new SqlDataAdapter("select * from Customers", conn); //創(chuàng)建讀取Orders表的適配器 SqlDataAdapter orderAdapter = new SqlDataAdapter("select * from Orders", conn); //填充兩個(gè)表的數(shù)據(jù)并放到DataSet中 custAdapter.Fill(ds, "Customers"); orderAdapter.Fill(ds, "Orders"); //創(chuàng)建兩個(gè)表之間的關(guān)系 DataRelation custOrderRel = ds.Relations.Add("CustOrders", ds.Tables["Customers"].Columns["CustomerID"], ds.Tables["Orders"].Columns["CustomerID"]); foreach (DataRow custRow in ds.Tables["Customers"].Rows) { Console.WriteLine("Customer ID: " + custRow["CustomerID"] + "\tName: " + custRow["CompanyName"]); foreach (DataRow orderRow in custRow.GetChildRows(custOrderRel)) { Console.WriteLine(" Order ID: "+orderRow["OrderID"]); } } conn.Close(); Console.ReadKey(); }
利用兩個(gè)表之間的關(guān)系訪問表中的數(shù)據(jù)的時(shí)候,我們還可以使用Linq over DataSet 。這需要導(dǎo)入System.Data.Linq命名空間。我們可以使用如下代碼代替上述代碼中的foreach部分:
var preferredCustomers = from c in Customers where c.GetChildRows("CustOrders").Length > 10 orderby c.GetChildRows("CustOrders").Length select c; Console.WriteLine("Customers with > 10 orders:"); foreach (var customer in preferredCustomers) { Console.WriteLine("{0} orders: {1} {2}, {3} {4}",customer.GetChildRows("CustOrders").Length, customer["CustomerID"],customer["CompanyName"],customer["City"],customer["Region"]); }
關(guān)于怎么在C#中將多張表存放到dataset中就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。