posts - 495,comments - 227,trackbacks - 0

          Microsoft Application Blocks for .NET

          Data Access Application Block 概述

          Chris Brooks、Graeme Malcolm、Alex Mackman、Edward Jezierski
          Microsoft Corporation

          2002 年 4 月

          摘要:Data Access Application Block 是一個(gè) .NET 組件,包含優(yōu)化的數(shù)據(jù)訪(fǎng)問(wèn)代碼,可以幫助用戶(hù)調(diào)用存儲(chǔ)過(guò)程以及向 SQL Server 數(shù)據(jù)庫(kù)發(fā)出 SQL 文本命令。它返回 SqlDataReader、DataSet 和 XmlReader 對(duì)象。您可以在自己的 .NET 應(yīng)用程序中將其作為構(gòu)造塊來(lái)使用,以減少需要?jiǎng)?chuàng)建、測(cè)試和維護(hù)的自定義代碼的數(shù)量。您可以下載完整的 C# 和 Visual Basic .NET 源代碼以及綜合文檔。

          簡(jiǎn)介

          您是否正在從事 .NET 應(yīng)用程序數(shù)據(jù)訪(fǎng)問(wèn)代碼的設(shè)計(jì)和開(kāi)發(fā)?您是否覺(jué)得自己總是在反復(fù)編寫(xiě)相同的數(shù)據(jù)訪(fǎng)問(wèn)代碼?您是否曾經(jīng)將數(shù)據(jù)訪(fǎng)問(wèn)代碼包裝在 Helper 函數(shù)中,以便能夠在一行中調(diào)用存儲(chǔ)過(guò)程?如果是,那么 Microsoft? Data Access Application Block for .NET 正是為您設(shè)計(jì)的。

          Data Access Application Block 將訪(fǎng)問(wèn) Microsoft SQL Server? 數(shù)據(jù)庫(kù)的性能和資源管理方面的最佳經(jīng)驗(yàn)封裝在一起。您可以很方便地在自己的 .NET 應(yīng)用程序中將其作為構(gòu)造塊使用,從頁(yè)減少了需要?jiǎng)?chuàng)建、測(cè)試和維護(hù)的自定義代碼的數(shù)量。

          尤其是,Data Access Application Block 可以幫助您:

          • 調(diào)用存儲(chǔ)過(guò)程或 SQL 文本命令。
          • 指定參數(shù)詳細(xì)信息。
          • 返回 SqlDataReader、DataSet 或 XmlReader 對(duì)象。

          例如,在引用了 Data Access Application Block 的應(yīng)用程序中,您可以簡(jiǎn)單地在一行代碼中調(diào)用存儲(chǔ)過(guò)程并生成 DataSet,如下所示:

          [Visual Basic]
          Dim ds As DataSet = SqlHelper.ExecuteDataset( _
                connectionString, _
                CommandType.StoredProcedure, _
                "getProductsByCategory", _
                new SqlParameter("@CategoryID", categoryID))
           
          [C#]
          DataSet ds = SqlHelper.ExecuteDataset( 
                connectionString,
                CommandType.StoredProcedure,
                "getProductsByCategory",
                new SqlParameter("@CategoryID", categoryID)); 
            
            
          注意: Application Block for .NET(用于 .NET 的應(yīng)用程序塊)是基于對(duì)成功的 .NET 應(yīng)用程序進(jìn)行詳細(xì)研究而設(shè)計(jì)的。它以源代碼的形式提供,您可以原樣使用,也可以針對(duì)自己的應(yīng)用程序進(jìn)行自定義。該應(yīng)用程序塊并不代表未來(lái) Microsoft ADO.NET 程序庫(kù)的發(fā)展方向。Microsoft ADO.NET 程序庫(kù)是為在各種使用情況下實(shí)現(xiàn)對(duì)數(shù)據(jù)訪(fǎng)問(wèn)行為的精確控制而建立的。將來(lái)的 ADO.NET 版本可能會(huì)使用不同的模型來(lái)實(shí)現(xiàn)這個(gè)方案。

          本概述的其余部分包括以下內(nèi)容:

          Data Access Application Block 包括哪些內(nèi)容?

          下載和安裝 Data Access Application Block

          使用 Data Access Application Block

          內(nèi)部設(shè)計(jì)

          常見(jiàn)問(wèn)題

          反饋和支持

          合作者

          Data Access Application Block 包括哪些內(nèi)容?

          提供了 Data Access Application Block 的源代碼以及快速入門(mén)示例應(yīng)用程序,您可以使用這些應(yīng)用程序測(cè)試其功能。Data Access Application Block 還包括綜合文檔,可以幫助您使用和了解所提供的代碼。

          Visual Studio .NET 項(xiàng)目

          提供了 Data Access Application Block 的 Microsoft Visual Basic? .NET 和 Microsoft Visual C#? 源代碼,以及每種語(yǔ)言的快速入門(mén)示例客戶(hù)端應(yīng)用程序,您可以使用這些應(yīng)用程序測(cè)試常見(jiàn)的方案。這有助于加深您對(duì) Data Access Application Block 的工作原理的了解。您還可以自定義源代碼以滿(mǎn)足自己的需要。

          您可以編譯 Visual Basic 和 C# Microsoft.ApplicationBlocks.Data 項(xiàng)目,以生成一個(gè)名為 Microsoft.ApplicationBlocks.Data.dll 的程序集。該程序集包括一個(gè) SqlHelper 類(lèi)(其中包含用于執(zhí)行數(shù)據(jù)庫(kù)命令的核心功能)和一個(gè) SqlhelperParameterCache 類(lèi)(提供參數(shù)發(fā)現(xiàn)和緩存功能)。

          文檔

          Data Access Application Block 的文檔主要包括以下內(nèi)容:

          • 使用 Data Access Application Block 開(kāi)發(fā)應(yīng)用程序。本部分包括快速入門(mén)示例,其中包含多種常見(jiàn)的使用情況,可以幫助您快速輕松地掌握 Data Access Application Block(數(shù)據(jù)訪(fǎng)問(wèn)應(yīng)用程序塊)的使用。
          • Data Access Application Block 的設(shè)計(jì)與實(shí)現(xiàn)。本部分包括背景設(shè)計(jì)原理信息,以便用戶(hù)深入了解 Data Access Application Block 的設(shè)計(jì)與實(shí)現(xiàn)。
          • 部署和運(yùn)行。本部分包括安裝信息,其中包含部署和更新選項(xiàng)以及與安全性有關(guān)的信息。
          • 參考。本部分包含綜合的 API 參考,其中詳細(xì)介紹了構(gòu)成 Data Access Application Block 的類(lèi)和接口。

          系統(tǒng)要求

          要運(yùn)行 Data Access Application Block,需要滿(mǎn)足以下要求:

          • Microsoft Windows? 2000、Windows XP Professional
          • .NET Framework SDK(英文)的 RTM 版本
          • Visual Studio? .NET 的 RTM 版本(推薦,但不必需)
          • SQL Server 7.0 或更高版本的數(shù)據(jù)庫(kù)服務(wù)器

          下載并安裝 Data Access Application Block

          您可以獲取一個(gè)包含已簽名的 Data Access Application Block 程序集和綜合文檔的 Windows 安裝程序文件。

          安裝進(jìn)程將在您的“程序”菜單中創(chuàng)建一個(gè) Microsoft Application Blocks for .NET(用于 .NET 的 Microsoft 應(yīng)用程序塊)子菜單。該子菜單中有一個(gè) Data Access(數(shù)據(jù)訪(fǎng)問(wèn))子菜單,其中包括用于啟動(dòng)文檔的選項(xiàng)和用于啟動(dòng) Data Access Application Block Visual Studio .NET 解決方案的選項(xiàng)。

          請(qǐng)轉(zhuǎn)到 MSDN Downloads(英文)進(jìn)行下載。

          使用 Data Access Application Block

          本節(jié)討論如何使用 Data Access Application Block 來(lái)執(zhí)行數(shù)據(jù)庫(kù)命令和管理參數(shù)。圖 1 顯示了 Data Access Application Block 的主要元素。

          圖 1:Data Access Application Block

          SqlHelper 類(lèi)提供了一組靜態(tài)方法,可以用來(lái)向 SQL Server 數(shù)據(jù)庫(kù)發(fā)出許多各種不同類(lèi)型的命令。

          SqlHelperParameterCache 類(lèi)提供命令參數(shù)緩存功能,可以用來(lái)提高性能。該類(lèi)由許多 Execute 方法(尤其是那些只運(yùn)行存儲(chǔ)過(guò)程的重寫(xiě)方法)在內(nèi)部使用。數(shù)據(jù)訪(fǎng)問(wèn)客戶(hù)端也可以直接使用它來(lái)緩存特定命令的特定參數(shù)集。

          使用 SqlHelper 類(lèi)執(zhí)行命令

          SqlHelper 類(lèi)提供了五種 Shared (Visual Basic) 或 static (C#) 方法,它們是:ExecuteNonQueryExecuteDatasetExecuteReaderExecuteScalarExecuteXmlReader。實(shí)現(xiàn)的每種方法都提供一組一致的重載。這提供了一種很好的使用 SqlHelper 類(lèi)來(lái)執(zhí)行命令的模式,同時(shí)為開(kāi)發(fā)人員選擇訪(fǎng)問(wèn)數(shù)據(jù)的方式提供了必要的靈活性。每種方法的重載都支持不同的方法參數(shù),因此開(kāi)發(fā)人員可以確定傳遞連接、事務(wù)和參數(shù)信息的方式。類(lèi)中實(shí)現(xiàn)的所有方法都支持以下重載:

          [Visual Basic]
          Execute* (ByVal connection As SqlConnection, _
                    ByVal commandType As CommandType, _
                    ByVal CommandText As String)
          
          Execute* (ByVal connection As SqlConnection, _
                    ByVal commandType As CommandType, _
                    ByVal commandText As String, _
                    ByVal ParamArray commandParameters() As SqlParameter)
          
          Execute* (ByVal connection As SqlConnection, _
                    ByVal spName As String, _
                    ByVal ParamArray parameterValues() As Object)
          
          Execute* (ByVal transaction As SqlTransaction, _
                    ByVal commandType As CommandType, _
                    ByVal commandText As String)
          
          Execute* (ByVal transaction As SqlTransaction, _
                    ByVal commandType As CommandType, _
                    ByVal commandText As String, _
                    ByVal ParamArray commandParameters() As SqlParameter)
          
          Execute* (ByVal transaction As SqlTransaction, _
                    ByVal spName As String, _
                    ByVal ParamArray parameterValues() As Object)
          
          [C#]
          Execute* (SqlConnection connection, CommandType commandType, 
                    string commandText)
          
          Execute* (SqlConnection connection, CommandType commandType,
                    string commandText, params SqlParameter[] commandParameters)
          
          Execute* (SqlConnection connection, string spName, 
                    params object[] parameterValues)
          
          Execute* (SqlConnection connection, 
                    CommandType commandType, string commandText)
          
          Execute* (SqlConnection connection,
                    CommandType commandType, string commandText, 
                    params SqlParameter[] commandParameters)
          
          Execute* (SqlConnection connection,
                    string spName, params object[] parameterValues)
          

          除這些重載以外,除 ExecuteXmlReader 之外的其他方法還提供了另一種重載:允許將連接信息作為連接字符串而不是連接對(duì)象來(lái)傳遞,如下面的方法簽名所示:

          [Visual Basic]
          Execute* (ByVal connectionString As String, _
                    ByVal commandType As CommandType, _
                    ByVal commandText As String)
          
          Execute* (ByVal connectionString As String, _
                    ByVal commandType As CommandType, _
                    ByVal commandText As String, _
                    ByVal ParamArray commandParameters() As SqlParameter)
          
          Execute* (ByVal connectionString As String, _
                    ByVal spName As String, _
                    ByVal ParamArray parameterValues() As Object)
          
          [C#]
          Execute* (string connectionString, CommandType commandType, 
                    string commandText)
          
          Execute* (string connectionString, CommandType commandType, 
                    string commandText, 
                    params SqlParameter[] commandParameters)
          
          Execute* (string connectionString, string spName, 
                    params object[] parameterValues)
          
          注意: ExecuteXmlReader 不支持連接字符串,因?yàn)椋号c SqlDataReader 對(duì)象不同,XmlReader 對(duì)象在 XmlReader 關(guān)閉時(shí)沒(méi)有提供自動(dòng)關(guān)閉連接的方法。如果客戶(hù)端傳遞了連接字符串,那么當(dāng)客戶(hù)端完成對(duì) XmlReader 的操作后,將無(wú)法關(guān)閉與 XmlReader 相關(guān)聯(lián)的連接對(duì)象。

          通過(guò)參考 Data Access Application Block 程序集并導(dǎo)入 Microsoft.ApplicationBlocks.Data 命名空間,您可以輕松編寫(xiě)使用任何一種 SqlHelper 類(lèi)方法的代碼,如下面的代碼示例所示:

          [Visual Basic]
          Imports Microsoft.ApplicationBlocks.Data
          
          [C#]
          using Microsoft.ApplicationBlocks.Data;
            

          導(dǎo)入命名空間后,您可以調(diào)用任何 Execute* 方法,如下面的代碼示例所示:

          [Visual Basic]
          Dim ds As DataSet = SqlHelper.ExecuteDataset( _
             "SERVER=(local);DATABASE=Northwind;INTEGRATED SECURITY=True;",
               _
             CommandType.Text, "SELECT * FROM Products")
          
          [C#]
          DataSet ds = SqlHelper.ExecuteDataset( 
             "SERVER=DataServer;DATABASE=Northwind;INTEGRATED
               SECURITY=sspi;", _
             CommandType.Text, "SELECT * FROM Products");
          

          使用 SqlHelperParameterCache 類(lèi)管理參數(shù)

          SqlHelperParameterCache 類(lèi)提供了三種可以用來(lái)管理參數(shù)的公共共享方法。它們是:

          • CacheParameterSet。用于將 SqlParameters 數(shù)組存儲(chǔ)到緩存中。
          • GetCachedParameterSet。用于檢索緩存的參數(shù)數(shù)組的副本。
          • GetSpParameterSet。一種重載方法,用于檢索指定存儲(chǔ)過(guò)程的相應(yīng)參數(shù)(首先查詢(xún)一次數(shù)據(jù)庫(kù),然后緩存結(jié)果以便將來(lái)查詢(xún))。

          緩存和檢索參數(shù)

          通過(guò)使用 CacheParameterSet 方法,可以緩存 SqlParameter 對(duì)象數(shù)組。此方法通過(guò)將連接字符串和命令文本連接起來(lái)創(chuàng)建一個(gè)鍵,然后將參數(shù)數(shù)組存儲(chǔ)在 Hashtable 中。

          要從緩存中檢索參數(shù),請(qǐng)使用 GetCachedParameterSet 方法。此方法將返回一個(gè) SqlParameter 對(duì)象數(shù)組,這些對(duì)象已使用緩存(與傳遞給該方法的連接字符串和命令文本相對(duì)應(yīng))中的參數(shù)的名稱(chēng)、值、方向和數(shù)據(jù)類(lèi)型等進(jìn)行了初始化。

          注意: 用作參數(shù)集的鍵的連接字符串通過(guò)簡(jiǎn)單的字符串比較進(jìn)行匹配。用于從 GetCachedParameterSet 中檢索參數(shù)的連接字符串必須與用來(lái)通過(guò) CacheParameterSet 來(lái)存儲(chǔ)這些參數(shù)的連接字符串完全相同。語(yǔ)法不同的連接字符串即使語(yǔ)義相同,也不會(huì)被認(rèn)為是匹配的。

          以下代碼顯示了如何使用 SqlHelperParameterCache 類(lèi)來(lái)緩存和檢索 Transact-SQL 語(yǔ)句的參數(shù)。

          [Visual Basic]
          ' 初始化連接字符串和命令文本
          ' 它們將構(gòu)成用來(lái)存儲(chǔ)和檢索參數(shù)的鍵
          Const CONN_STRING As String = _
            "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;"
          Dim sql As String = _
                 "SELECT ProductName FROM Products " + _
                 "WHERE Category=@Cat AND SupplierID = @Sup"
          
          ' 緩存參數(shù)
          Dim paramsToStore(1) As SqlParameter
          paramsToStore(0) = New SqlParameter("@Cat", SqlDbType.Int)
          paramsToStore(1) = New SqlParameter("@Sup", SqlDbType.Int)
          SqlHelperParameterCache.CacheParameterSet(CONN_STRING, _
                                                    sql, _
                                                    paramsToStore)
          
          ' 從緩存中檢索參數(shù)
          Dim storedParams(1) As SqlParameter
          storedParams = SqlHelperParameterCache.GetCachedParameterSet( _
                                                           CONN_STRING, sql)
          storedParams(0).Value = 2
          storedParams(1).Value = 3
          
          ' 在命令中使用參數(shù)
          Dim ds As DataSet
          ds = SqlHelper.ExecuteDataset(CONN_STRING, _
                                        CommandType.Text, _
                                        sql, storedParams)
          
          [C#]
          // 初始化連接字符串和命令文本
          // 它們將構(gòu)成用來(lái)存儲(chǔ)和檢索參數(shù)的鍵
          const string CONN_STRING =
            "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;";
          string spName = "SELECT ProductName FROM Products " + 
                          "WHERE Category=@Cat AND SupplierID = @Sup";
          
          // 緩存參數(shù)
          SqlParameter[] paramsToStore = new SqlParameter[2];
          paramsToStore[0] = New SqlParameter("@Cat", SqlDbType.Int);
          paramsToStore[1] = New SqlParameter("@Sup", SqlDbType.Int);
          SqlHelperParameterCache.CacheParameterSet(CONN_STRING, 
                                                    sql, 
                                                    paramsToStore);
          
          // 從緩存中檢索參數(shù)
          SqlParameter storedParams = new SqlParameter[2];
          storedParams = SqlHelperParameterCache.GetCachedParameterSet(
                                                        CONN_STRING, sql);
          storedParams(0).Value = 2;
          storedParams(1).Value = 3;
          
          // 在命令中使用參數(shù)
          DataSet ds;
          ds = SqlHelper.ExecuteDataset(CONN_STRING, 
                                        CommandType.StoredProcedure,
                                        sql, storedParams);
          

          檢索存儲(chǔ)過(guò)程參數(shù)

          SqlHelperParameterCache 還提供了針對(duì)特定存儲(chǔ)過(guò)程檢索參數(shù)數(shù)組的方法。一種名為 GetSpParameterSet 的重載方法提供了此功能,它包含兩種實(shí)現(xiàn)。該方法嘗試從緩存中檢索特定存儲(chǔ)過(guò)程的參數(shù)。如果這些參數(shù)尚未被緩存,則使用 .NET 的 SqlCommandBuilder 類(lèi)從內(nèi)部檢索,并將它們添加到緩存中,以便用于后續(xù)的檢索請(qǐng)求。然后,為每個(gè)參數(shù)指定相應(yīng)的參數(shù)設(shè)置,最后將這些參數(shù)以數(shù)組形式返回給客戶(hù)端。以下代碼顯示了如何檢索 Northwind 數(shù)據(jù)庫(kù)中 SalesByCategory 存儲(chǔ)過(guò)程的參數(shù)。

          [Visual Basic]
          ' 初始化連接字符串和命令文本
          ' 它們將構(gòu)成用來(lái)存儲(chǔ)和檢索參數(shù)的鍵
          Const CONN_STRING As String = _
            "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;"
          Dim spName As String = "SalesByCategory"
          
          ' 檢索參數(shù)
          Dim storedParams(1) As SqlParameter
          storedParams = SqlHelperParameterCache.GetSpParameterSet( _
                                                    CONN_STRING, spName)
          storedParams(0).Value = "Beverages"
          storedParams(1).Value = "1997"
          
          ' 在命令中使用參數(shù)
          Dim ds As DataSet
          ds = SqlHelper.ExecuteDataset(CONN_STRING, _
                                        CommandType.StoredProcedure, _
                                        spName, storedParams)
          
          [C#]
          // 初始化連接字符串和命令文本
          // 它們將構(gòu)成用來(lái)存儲(chǔ)和檢索參數(shù)的鍵
          const string CONN_STRING = 
            "SERVER=(local); DATABASE=Northwind; INTEGRATED SECURITY=True;";
          string spName = "SalesByCategory";
          
          // 檢索參數(shù)
          SqlParameter storedParams = new SqlParameter[2];
          storedParams = SqlHelperParameterCache.GetSpParameterSet(
                                                    CONN_STRING, spName);
          storedParams[0].Value = "Beverages";
          storedParams[1].Value = "1997";
          
          // 在命令中使用參數(shù)
          DataSet ds;
          ds = SqlHelper.ExecuteDataset(CONN_STRING, 
                                        CommandType.StoredProcedure,
                                        spName, storedParams);
          

          內(nèi)部設(shè)計(jì)

          Data Access Application Block 包含了完整的源代碼和有關(guān)其設(shè)計(jì)的綜合指南。本節(jié)介紹有關(guān)主要實(shí)現(xiàn)的詳細(xì)信息。

          SqlHelper 類(lèi)實(shí)現(xiàn)詳細(xì)信息

          SqlHelper 類(lèi)用于通過(guò)一組靜態(tài)方法來(lái)封裝數(shù)據(jù)訪(fǎng)問(wèn)功能。該類(lèi)不能被繼承或?qū)嵗虼藢⑵渎暶鳛榘瑢?zhuān)用構(gòu)造函數(shù)的不可繼承類(lèi)。

          SqlHelper 類(lèi)中實(shí)現(xiàn)的每種方法都提供了一組一致的重載。這提供了一種很好的使用 SqlHelper 類(lèi)來(lái)執(zhí)行命令的模式,同時(shí)為開(kāi)發(fā)人員選擇訪(fǎng)問(wèn)數(shù)據(jù)的方式提供了必要的靈活性。每種方法的重載都支持不同的方法參數(shù),因此開(kāi)發(fā)人員可以確定傳遞連接、事務(wù)和參數(shù)信息的方式。在 SqlHelper 類(lèi)中實(shí)現(xiàn)的方法包括:

          • ExecuteNonQuery。此方法用于執(zhí)行不返回任何行或值的命令。這些命令通常用于執(zhí)行數(shù)據(jù)庫(kù)更新,但也可用于返回存儲(chǔ)過(guò)程的輸出參數(shù)。
          • ExecuteReader。此方法用于返回 SqlDataReader 對(duì)象,該對(duì)象包含由某一命令返回的結(jié)果集。
          • ExecuteDataset。此方法返回 DataSet 對(duì)象,該對(duì)象包含由某一命令返回的結(jié)果集。
          • ExecuteScalar。此方法返回一個(gè)值。該值始終是該命令返回的第一行的第一列。
          • ExecuteXmlReader。此方法返回 FOR XML 查詢(xún)的 XML 片段。

          除了這些公共方法外,SqlHelper 類(lèi)還包含一些專(zhuān)用函數(shù),用于管理參數(shù)和準(zhǔn)備要執(zhí)行的命令。不管客戶(hù)端調(diào)用什么樣的方法實(shí)現(xiàn),所有命令都通過(guò) SqlCommand 對(duì)象來(lái)執(zhí)行。在 SqlCommand 對(duì)象能夠被執(zhí)行之前,所有參數(shù)都必須添加到 Parameters 集合中,并且必須正確設(shè)置 ConnectionCommandTypeCommandTextTransaction 屬性。SqlHelper 類(lèi)中的專(zhuān)用函數(shù)主要用于提供一種一致的方式,以便向 SQL Server 數(shù)據(jù)庫(kù)發(fā)出命令,而不考慮客戶(hù)端應(yīng)用程序調(diào)用的重載方法實(shí)現(xiàn)。SqlHelper 類(lèi)中的專(zhuān)用實(shí)用程序函數(shù)包括:

          • AttachParameters:該函數(shù)用于將所有必要的 SqlParameter 對(duì)象連接到正在運(yùn)行的 SqlCommand。
          • AssignParameterValues:該函數(shù)用于為 SqlParameter 對(duì)象賦值。
          • PrepareCommand:該函數(shù)用于對(duì)命令的屬性(如連接、事務(wù)環(huán)境等)進(jìn)行初始化。
          • ExecuteReader:此專(zhuān)用 ExecuteReader 實(shí)現(xiàn)用于通過(guò)適當(dāng)?shù)?CommandBehavior 打開(kāi) SqlDataReader 對(duì)象,以便最有效地管理與閱讀器關(guān)聯(lián)的連接的有效期。

          SqlHelperParameterCache 類(lèi)實(shí)現(xiàn)詳細(xì)信息

          參數(shù)數(shù)組緩存在專(zhuān)用 Hashtable 中。從緩存中檢索的參數(shù)進(jìn)行內(nèi)部復(fù)制,這樣客戶(hù)端應(yīng)用程序能夠更改參數(shù)值以及進(jìn)行其他操作,而不會(huì)影響緩存的參數(shù)數(shù)組。專(zhuān)用共享函數(shù) CloneParameters 可以實(shí)現(xiàn)此目的。

          常見(jiàn)問(wèn)題

          此版本包含哪些新增功能?

          與 Data Access Application Block Beta 2.0 版本相比,該 RTM 版本包含以下新增功能和變化:

          • SqlHelper 類(lèi)方法的事務(wù)型重載不再需要 SqlConnection 參數(shù)。在此版本中,連接信息從 SqlTransaction 對(duì)象中派生,因此不必在方法簽名中包含 SqlConnection 對(duì)象參數(shù)。
          • 現(xiàn)在,GetSpParameterSet 方法使用 ADO.NET CommandBuilder 類(lèi)的 DeriveParameters 方法來(lái)確定存儲(chǔ)過(guò)程所需要的參數(shù)。這比 Beta 2.0 版本中直接通過(guò)查詢(xún)數(shù)據(jù)庫(kù)來(lái)檢索信息的效率更高。

          可以使用 XCOPY 部署方法來(lái)部署 Data Access Application Block 程序集嗎?

          可以。Microsoft.ApplicationBlocks.Data.dll 程序集在編譯后可以使用 XCOPY 進(jìn)行部署。

          什么時(shí)候應(yīng)該使用 ExecuteDataset 方法,什么時(shí)候應(yīng)該使用 ExecuteReader 方法?

          這個(gè)問(wèn)題實(shí)際上是什么時(shí)候應(yīng)該返回 DataSet 對(duì)象中的多個(gè)數(shù)據(jù)行,什么時(shí)候應(yīng)該使用 DataReader。答案取決于您的應(yīng)用程序的特定需要,以及您在靈活性和原始性能之間的取舍。DataSet 為您提供數(shù)據(jù)的靈活的且斷開(kāi)連接的關(guān)系視圖,而 DataReader 為您提供性能卓越的、只讀的、僅向前光標(biāo)。有關(guān) DataSet 和 DataReader 的全面比較,請(qǐng)參閱 Data Access Architecture Guide(英文)。

          如何使用 ExecuteDataset 返回包含多個(gè)表的數(shù)據(jù)集?

          通過(guò)創(chuàng)建一個(gè)可以返回多個(gè)行集的存儲(chǔ)過(guò)程(通過(guò)執(zhí)行多個(gè) SELECT 語(yǔ)句或者對(duì)其他存儲(chǔ)過(guò)程進(jìn)行嵌套調(diào)用),并使用 ExecuteDataset 方法執(zhí)行該過(guò)程,您可以檢索包含多個(gè)表的數(shù)據(jù)集。

          例如,假設(shè)您的數(shù)據(jù)庫(kù)包含以下存儲(chǔ)過(guò)程。

          CREATE PROCEDURE GetCategories
          AS
          SELECT * FROM Categories
          GO
          CREATE PROCEDURE GetProducts
          AS
          SELECT * FROM Products
            

          您可以創(chuàng)建一個(gè)主存儲(chǔ)過(guò)程來(lái)對(duì)這些過(guò)程進(jìn)行嵌套調(diào)用,如下面的代碼示例所示。

          CREATE PROCEDURE GetCategoriesAndProducts
          AS
          BEGIN
            EXEC GetCategories
            EXEC GetProducts
          END
            

          使用 ExecuteDataset 方法執(zhí)行此主存儲(chǔ)過(guò)程將返回一個(gè) DateSet,其中包含兩個(gè)表:一個(gè)表包含分類(lèi)數(shù)據(jù),另一個(gè)表包含產(chǎn)品數(shù)據(jù)。

          注意: ExecuteDataset 方法不提供為返回的表指定自定義名稱(chēng)的方法。第一個(gè)表的編號(hào)始終為 0,名稱(chēng)為 Table,第二個(gè)表的編號(hào)為 1,名稱(chēng)為 Table1,依此類(lèi)推。

          還有其他的應(yīng)用程序塊嗎?

          Data Access Application Block 是即將發(fā)布的幾個(gè)應(yīng)用程序塊之一。這些應(yīng)用程序塊可以解決開(kāi)發(fā)人員在不同項(xiàng)目中遇到的共同問(wèn)題。它們可以快速方便地插入到 .NET 應(yīng)用程序中。

          反饋和支持

          如果您對(duì) Data Access Application Block 有任何問(wèn)題、意見(jiàn)和建議,請(qǐng)向 devfdbck@microsoft.com 發(fā)送電子郵件,我們將及時(shí)提供反饋。

          Application Blocks for .NET 旨在協(xié)助開(kāi)發(fā) .NET 分布式應(yīng)用程序。示例代碼和文檔都按原樣提供。盡管已經(jīng)過(guò)測(cè)試并被認(rèn)為是穩(wěn)定的代碼集,但我們并不象傳統(tǒng)的 Microsoft 產(chǎn)品那樣對(duì)其提供支持。

          我們還創(chuàng)建了一個(gè)新聞組,可以幫助您使用 Application Blocks for .NET(.NET 應(yīng)用程序塊)。您可以通過(guò)新聞組在聯(lián)機(jī)的開(kāi)放論壇中向同行、同事和 Microsoft 支持專(zhuān)家咨詢(xún)。

          其他人也可以從您的問(wèn)題和評(píng)論中獲益,我們的開(kāi)發(fā)小組將每天查看新聞組:
          新聞組:基于 Web 的讀者
          http://msdn.microsoft.com/newsgroups/loadframes.asp?icp=msdn&slcid=us&newsgroup=microsoft.public.dotnet.distributed_apps(英文)

          新聞組:NNTP 讀者
          news://msnews.microsoft.com/microsoft.public.dotnet.distributed_apps(英文)

          您想學(xué)習(xí)和利用 .NET 的功能嗎?歡迎您與 Microsoft Technology Centers 的技術(shù)專(zhuān)家并肩工作,您將學(xué)到最好的開(kāi)發(fā)經(jīng)驗(yàn)。有關(guān)詳細(xì)信息,請(qǐng)?jiān)L問(wèn) http://www.microsoft.com/business/services/mtc.asp(英文)。

          您需要更多的幫助嗎?請(qǐng)?jiān)L問(wèn)新增的客戶(hù)支持服務(wù) Advisory Services,該解決方案可以滿(mǎn)足您小規(guī)模的咨詢(xún)需要。有關(guān) Advisory Services 的詳細(xì)信息,請(qǐng)?jiān)L問(wèn) http://support.microsoft.com/default.aspx?id=fh;EN-US;advisoryservice(英文)。

          更多信息

          Data Access Application Block 的設(shè)計(jì)和開(kāi)發(fā)是建立在 Data Access in .NET Architecture Guide(英文)中討論的最佳開(kāi)發(fā)經(jīng)驗(yàn)和通用設(shè)計(jì)原則基礎(chǔ)之上的。請(qǐng)閱讀該指南,以了解有關(guān)數(shù)據(jù)訪(fǎng)問(wèn)的詳細(xì)信息。

          posted on 2007-01-22 11:06 SIMONE 閱讀(768) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): .NET
          主站蜘蛛池模板: 大宁县| 明水县| 寻甸| 兴安县| 宣恩县| 庄浪县| 乐陵市| 彩票| 长海县| 化州市| 驻马店市| 温宿县| 隆林| 屯门区| 中卫市| 南和县| 津南区| 九龙城区| 鲁甸县| 封丘县| 太康县| 金山区| 天长市| 曲麻莱县| 天峻县| 祁东县| 牡丹江市| 银川市| 大英县| 许昌县| 志丹县| 伊川县| 墨江| 徐州市| 新宁县| 丹寨县| 山阳县| 安平县| 南靖县| 汉寿县| 乳山市|