歸納ADO.NET 2.0新特性好處
關(guān)注ADO.NET的朋友一定知道ADO.NET 2.0新特性,昨天在圖書(shū)館看到一本關(guān)于簡(jiǎn)介新特性的書(shū),在這里把我的感受分析給大家聽(tīng)聽(tīng)。在這篇文章里我將盡量簡(jiǎn)單的描述下ADO.NET 2.0的新特性,尤其是配合SQL Server 2005所展現(xiàn)出來(lái)的強(qiáng)大實(shí)力。如果想進(jìn)一步了解ADO.NET 2.0編程方面的話(huà),可以去閱讀Glenn Johnson的--"ADO.NET 2.0高級(jí)編程。
一:ADO.NET 2.0新特性功能強(qiáng)大的
#T#2005年底(2005年10月)與 SQL Server 2005一起出現(xiàn)的是 .NET Framework 2.0 版本,其中用來(lái)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的 ADO.NET類(lèi)也升級(jí)到 ADO.NET 2.0 版。ADO.NET 2.0 除了增強(qiáng)舊功能外,也提供了相當(dāng)多的新功能,包含了以基礎(chǔ)類(lèi)為本(base-class-based)的數(shù)據(jù)源提供程序(provider)模型、異步訪(fǎng)問(wèn)架構(gòu)、批處理更新與大量數(shù)據(jù)復(fù)制(bulk copy)、SQL Server 2005 的回調(diào)通知、單一連接同時(shí)多執(zhí)行結(jié)果集(MARS)、執(zhí)行統(tǒng)計(jì)、強(qiáng)化的 DataSet 類(lèi)等等。換句話(huà)說(shuō),若要有效發(fā)揮 SQL Server 2005 的功能,前端應(yīng)用程序最好用 ADO.NET 2.0 來(lái)開(kāi)發(fā)。
ADO.NET 2.0的新特性提供了相當(dāng)多的新增功能,一些與數(shù)據(jù)源提供程序無(wú)關(guān),也就是訪(fǎng)問(wèn)各種數(shù)據(jù)庫(kù)都可以用到的功能,但有很大的一部分是專(zhuān)屬于 SQL Server 2005,針對(duì) SQL Server 2005 的新功能提供給前端應(yīng)用程序開(kāi)發(fā)使用。
二: ADO.NET 2.0新特性使用多數(shù)據(jù)結(jié)果集(僅限2005)
在之前版本的 SQL Server 同一時(shí)間一條連接只能傳遞一個(gè) SELECT 語(yǔ)法執(zhí)行后返回的結(jié)果集。如果想在一次連接后返回多個(gè)查詢(xún)內(nèi)容只能使用類(lèi)似如下的方法來(lái)實(shí)現(xiàn):
- SqlDataAdapter myDataAdapter = new SqlDataAdapter("StoredProcedureName",myConnection);
- myDataAdapter.SelectCommand.CommandType = CommandType.StoredProcedure;
- myDataAdapter.SelectCommand.Parameters.Add("@sqlstr",sqlstr);
- DataSet ds = new DataSet();
- myDataAdapter.Fill(ds);
- return ds; ds.Tables[0],ds.Tables[1],ds.Tables[2],//分別對(duì)應(yīng)三個(gè)結(jié)果集
SQL Server 2005提供了在同一條連接上可以同時(shí)傳遞多個(gè)沒(méi)有游標(biāo)結(jié)構(gòu)(cursorless)的結(jié)果集(也稱(chēng)為默認(rèn)結(jié)果集),此功能稱(chēng)為 Multiple Active Resultsets(MARS)。如此可以節(jié)省需要同時(shí)打開(kāi)的連接數(shù),但要注意的是連接字符串設(shè)置要加上 MultipleAct-iveResultSets=true 屬性,否則默認(rèn)不啟動(dòng)多數(shù)據(jù)結(jié)果集的功能。
- string connstr = "server=(local);
- database=northwind;integrated security=true;";
- SqlConnection conn = new SqlConnection(connstr);
- conn.Open(); SqlCommand cmd1 = new SqlCommand("select * from customers", conn);
- SqlCommand cmd2 = new SqlCommand("select * from orders", conn);
- SqlDataReader rdr1 = cmd1.ExecuteReader();
- // next statement causes an error prior to SQL Server 2005 SqlDataReader rdr2 = cmd2.ExecuteReader();
- // now you can reader from rdr1 and rdr2 at the same time.