亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 數(shù)據(jù)庫(kù) > Access > 正文

Data Access Application Block 概述

2024-09-07 19:04:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
國(guó)內(nèi)最大的酷站演示中心!
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ù)訪問(wèn)代碼,可以幫助用戶調(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ù)訪問(wèn)代碼的設(shè)計(jì)和開(kāi)發(fā)?您是否覺(jué)得自己總是在反復(fù)編寫(xiě)相同的數(shù)據(jù)訪問(wèn)代碼?您是否曾經(jīng)將數(shù)據(jù)訪問(wèn)代碼包裝在 helper 函數(shù)中,以便能夠在一行中調(diào)用存儲(chǔ)過(guò)程?如果是,那么 microsoft® data access application block for .net 正是為您設(shè)計(jì)的。

data access application block 將訪問(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ù)訪問(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)示例客戶端應(yīng)用程序,您可以使用這些應(yīng)用程序測(cè)試常見(jiàn)的方案。這有助于加深您對(duì) data access application block 的工作原理的了解。您還可以自定義源代碼以滿足自己的需要。

您可以編譯 visual basic 和 c# microsoft.applicationblocks.data 項(xiàng)目,以生成一個(gè)名為 microsoft.applicationblocks.data.dll 的程序集。該程序集包括一個(gè) sqlhelper 類(其中包含用于執(zhí)行數(shù)據(jù)庫(kù)命令的核心功能)和一個(gè) sqlhelperparametercache 類(提供參數(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ù)訪問(wèn)應(yīng)用程序塊)的使用。
data access application block 的設(shè)計(jì)與實(shí)現(xiàn)。本部分包括背景設(shè)計(jì)原理信息,以便用戶深入了解 data access application block 的設(shè)計(jì)與實(shí)現(xiàn)。
部署和運(yùn)行。本部分包括安裝信息,其中包含部署和更新選項(xiàng)以及與安全性有關(guān)的信息。
參考。本部分包含綜合的 api 參考,其中詳細(xì)介紹了構(gòu)成 data access application block 的類和接口。
系統(tǒng)要求
要運(yùn)行 data access application block,需要滿足以下要求:

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ù)訪問(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 類提供了一組靜態(tài)方法,可以用來(lái)向 sql server 數(shù)據(jù)庫(kù)發(fā)出許多各種不同類型的命令。

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

使用 sqlhelper 類執(zhí)行命令
sqlhelper 類提供了五種 shared (visual basic) 或 static (c#) 方法,它們是:executenonquery、executedataset、executereader、executescalar 和 executexmlreader。實(shí)現(xiàn)的每種方法都提供一組一致的重載。這提供了一種很好的使用 sqlhelper 類來(lái)執(zhí)行命令的模式,同時(shí)為開(kāi)發(fā)人員選擇訪問(wèn)數(shù)據(jù)的方式提供了必要的靈活性。每種方法的重載都支持不同的方法參數(shù),因此開(kāi)發(fā)人員可以確定傳遞連接、事務(wù)和參數(shù)信息的方式。類中實(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)閉連接的方法。如果客戶端傳遞了連接字符串,那么當(dāng)客戶端完成對(duì) xmlreader 的操作后,將無(wú)法關(guān)閉與 xmlreader 相關(guān)聯(lián)的連接對(duì)象。
通過(guò)參考 data access application block 程序集并導(dǎo)入 microsoft.applicationblocks.data 命名空間,您可以輕松編寫(xiě)使用任何一種 sqlhelper 類方法的代碼,如下面的代碼示例所示:

[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 類管理參數(shù)
sqlhelperparametercache 類提供了三種可以用來(lái)管理參數(shù)的公共共享方法。它們是:

cacheparameterset。用于將 sqlparameters 數(shù)組存儲(chǔ)到緩存中。
getcachedparameterset。用于檢索緩存的參數(shù)數(shù)組的副本。
getspparameterset。一種重載方法,用于檢索指定存儲(chǔ)過(guò)程的相應(yīng)參數(shù)(首先查詢一次數(shù)據(jù)庫(kù),然后緩存結(jié)果以便將來(lái)查詢)。
緩存和檢索參數(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ù)的名稱、值、方向和數(shù)據(jù)類型等進(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)緩存和檢索 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 [email protected] 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 [email protected] 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 類從內(nèi)部檢索,并將它們添加到緩存中,以便用于后續(xù)的檢索請(qǐng)求。然后,為每個(gè)參數(shù)指定相應(yīng)的參數(shù)設(shè)置,最后將這些參數(shù)以數(shù)組形式返回給客戶端。以下代碼顯示了如何檢索 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 類實(shí)現(xiàn)詳細(xì)信息
sqlhelper 類用于通過(guò)一組靜態(tài)方法來(lái)封裝數(shù)據(jù)訪問(wèn)功能。該類不能被繼承或?qū)嵗?,因此將其聲明為包含專用?gòu)造函數(shù)的不可繼承類。

在 sqlhelper 類中實(shí)現(xiàn)的每種方法都提供了一組一致的重載。這提供了一種很好的使用 sqlhelper 類來(lái)執(zhí)行命令的模式,同時(shí)為開(kāi)發(fā)人員選擇訪問(wèn)數(shù)據(jù)的方式提供了必要的靈活性。每種方法的重載都支持不同的方法參數(shù),因此開(kāi)發(fā)人員可以確定傳遞連接、事務(wù)和參數(shù)信息的方式。在 sqlhelper 類中實(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 查詢的 xml 片段。
除了這些公共方法外,sqlhelper 類還包含一些專用函數(shù),用于管理參數(shù)和準(zhǔn)備要執(zhí)行的命令。不管客戶端調(diào)用什么樣的方法實(shí)現(xiàn),所有命令都通過(guò) sqlcommand 對(duì)象來(lái)執(zhí)行。在 sqlcommand 對(duì)象能夠被執(zhí)行之前,所有參數(shù)都必須添加到 parameters 集合中,并且必須正確設(shè)置 connection、commandtype、commandtext 和 transaction 屬性。sqlhelper 類中的專用函數(shù)主要用于提供一種一致的方式,以便向 sql server 數(shù)據(jù)庫(kù)發(fā)出命令,而不考慮客戶端應(yīng)用程序調(diào)用的重載方法實(shí)現(xiàn)。sqlhelper 類中的專用實(shí)用程序函數(shù)包括:

attachparameters:該函數(shù)用于將所有必要的 sqlparameter 對(duì)象連接到正在運(yùn)行的 sqlcommand。
assignparametervalues:該函數(shù)用于為 sqlparameter 對(duì)象賦值。
preparecommand:該函數(shù)用于對(duì)命令的屬性(如連接、事務(wù)環(huán)境等)進(jìn)行初始化。
executereader:此專用 executereader 實(shí)現(xiàn)用于通過(guò)適當(dāng)?shù)?commandbehavior 打開(kāi) sqldatareader 對(duì)象,以便最有效地管理與閱讀器關(guān)聯(lián)的連接的有效期。
sqlhelperparametercache 類實(shí)現(xiàn)詳細(xì)信息
參數(shù)數(shù)組緩存在專用 hashtable 中。從緩存中檢索的參數(shù)進(jìn)行內(nèi)部復(fù)制,這樣客戶端應(yīng)用程序能夠更改參數(shù)值以及進(jìn)行其他操作,而不會(huì)影響緩存的參數(shù)數(shù)組。專用共享函數(shù) cloneparameters 可以實(shí)現(xiàn)此目的。

常見(jiàn)問(wèn)題
此版本包含哪些新增功能?
與 data access application block beta 2.0 版本相比,該 rtm 版本包含以下新增功能和變化:

sqlhelper 類方法的事務(wù)型重載不再需要 sqlconnection 參數(shù)。在此版本中,連接信息從 sqltransaction 對(duì)象中派生,因此不必在方法簽名中包含 sqlconnection 對(duì)象參數(shù)。
現(xiàn)在,getspparameterset 方法使用 ado.net commandbuilder 類的 deriveparameters 方法來(lái)確定存儲(chǔ)過(guò)程所需要的參數(shù)。這比 beta 2.0 版本中直接通過(guò)查詢數(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è)表包含分類數(shù)據(jù),另一個(gè)表包含產(chǎn)品數(shù)據(jù)。

注意: executedataset 方法不提供為返回的表指定自定義名稱的方法。第一個(gè)表的編號(hào)始終為 0,名稱為 table,第二個(gè)表的編號(hào)為 1,名稱為 table1,依此類推。
還有其他的應(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)向 [email protected] 發(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 支持專家咨詢。

其他人也可以從您的問(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ù)專家并肩工作,您將學(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)新增的客戶支持服務(wù) advisory services,該解決方案可以滿足您小規(guī)模的咨詢需要。有關(guān) advisory services 的詳細(xì)信息,請(qǐng)?jiān)L問(wèn) http://support.microsoft.com/default.aspx?scid=fh;en-us;offer58&fr=0&sd=gn&ln=en-us&ct=sd&se=nona(英文)。

更多信息
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ù)訪問(wèn)的詳細(xì)信息。

合作者
衷心感謝以下投稿人和審閱人:susan warren、brad abrams、andy dunn、michael day、mark ashton、gregory leake、steve busby、kenny jones、david schleifer、andrew roubin (vorsite corp.)、jeffrey richter (wintellect)、bernard chen (sapient) 和 matt drucker (turner broadcasting)。

同時(shí)感謝內(nèi)容組的以下成員:tina burden (entirenet)、shylender ramamurthy (infosys technologies ltd) 和 filiberto selvas patino。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
天天好比中文综合网| 亚洲制服av| 午夜精品久久久久久久蜜桃app| 中文字幕42页丝袜| 欧美一区二区播放| 精品人体无码一区二区三区| 黄色羞羞视频在线观看| 欧美不卡在线观看| 亚洲一区二区三区爽爽爽爽爽| 在线观看中文字幕网站| 91精品国产综合久久福利| 亚洲深夜福利网站| 九九热爱视频精品视频| 最新国产精品亚洲| 欧美色图在线观看| 天天做天天摸天天爽天天爱| 99久久国产综合精品麻豆| 第一av在线| 日本爱爱爱视频| 在线观看av免费观看| 国产精品国产精品国产| 91 在线视频| 国产欧美一区二区精品久久久| 91福利在线观看| 免费在线黄色电影| 午夜福利三级理论电影| 成人高清免费在线播放| 国产成人在线小视频| 凹凸日日摸日日碰夜夜| 亚洲高清精品中出| 免费黄色三级网站| 欧美一区二区三区日韩视频| 亚洲免费福利一区| 亚洲二区在线视频| 少妇高潮一区二区三区69| 欧美天堂亚洲电影院在线观看| 最近最好的中文字幕2019免费| 黄色一级视频在线观看| 男人的天堂va免费视频| 嫩草影院国产精品| 在线视频精品| 精品成人av一区二区在线播放| 免费a漫导航| 中文字幕一区二区三区电影| 欧美日韩在线精品一区二区三区激情| 嫩草嫩草嫩草| 欧亚一区二区| 能在线观看av网站| 精品少妇爆乳无码av无码专区| 男人av在线| 日韩视频中文字幕在线观看| 国产jzjzjz丝袜老师水多| 18毛片免费看| 性8sex亚洲区入口| 精品无吗乱吗av国产爱色| 色综合久久影院| 国产成人羞羞电影网站在线观看| 欧美性色黄在线视频| 亚洲欧美日韩天堂| 中文字幕日韩免费| 日韩成人一区| 亚洲精品国产片| 神马久久久久久久久久久| 一区二区亚洲| 在线性视频日韩欧美| 国产一区二区三区网| 8x海外华人永久免费日韩内陆视频| 日产国产精品精品a∨| 国产一区二区三区四区五区加勒比| 久久久久亚洲av无码专区首jn| 欧美激情视频免费观看| 亚洲国产美女视频| 一区二区三区在线|网站| 国产黄色片在线播放| 我和岳m愉情xxxⅹ视频| 777国产偷窥盗摄精品视频| 欧美激情国产日韩精品一区18| 欧美综合亚洲图片综合区| 久久精品亚洲国产奇米99| 国产成人三级在线播放| 先锋影音av网站| 亚洲成人先锋电影| 男人操女人动态图| 日韩精品乱码av一区二区| 18被视频免费观看视频| 欧洲vodafone精品| 自拍视频亚洲| 综合激情网五月| 亚洲做受高潮无遮挡| 波多野结衣一区二区三区在线| 日本va欧美va精品| 国产日韩欧美精品综合| 成人区一区二区| 综合色婷婷一区二区亚洲欧美国产| 日韩欧美激情一区| 免费av一区二区| 欧美特黄aaa| 免费在线观看a| 精品久久久久久无码中文野结衣| 99热这里只有精品免费| 国产91精品视频在线观看| 91九色蝌蚪视频| 一区二区三区中文在线| 91亚洲国产成人久久精品| 精品女同一区二区| 一本色道88久久加勒比精品| 91成人精品观看| 国产成人无码一区二区三区在线| 中文字幕日韩欧美| 嫩草国产精品入口| 亚洲大胆人体av| 精品国产精品三级精品av网址| 一本久久知道综合久久| 日韩一区二区三区四区区区| 色先锋av男人资源先锋影院| 亚洲国产精品激情在线观看| 国产欧美综合一区二区三区| 不卡av在线网| 欧美一区中文字幕| 成人男女网免费| www.日本在线视频| 91在线免费视频| 美腿丝袜亚洲色图| 91在线观看| 国产69精品久久久久9999apgf| 欧美极品少妇xxxxⅹ高跟鞋| 国产高清不卡无码视频| 91av免费看| 中文字幕色av一区二区三区| 日韩欧美亚洲国产精品字幕久久久| 久久久999视频| 激情网站五月天| 色综合免费视频| 全网免费在线播放视频入口| 在线观看成年人网站| 日韩精品一区二区三区外面| 久久久一本精品99久久精品66| japanesexxxxfree在线观看| 色www精品视频在线观看| 日韩精品久久久久久久酒店| 国产自产视频一区二区三区| 91在线资源站| 国产色产综合色产在线视频| 午夜精品视频在线观看一区二区| 99精品视频免费观看| 久久精品99国产精品| 找av导航入口| 福利视频网站| 色午夜这里只有精品| 九九热这里只有精品免费看| 青草青草久热精品视频在线网站| 国产精品videossex久久发布| 3d动漫精品啪啪一区二区下载| 深夜福利一区二区三区| av网站在线免费观看| 亚洲a级黄色片| 都市激情亚洲一区| 国产 高清 精品 在线 a| 99在线观看视频网站| 美女视频黄是免费| 97精品国产福利一区二区三区| 欧美色网站导航| 日韩成人av网址| 日韩欧美三级在线观看| 国产理论电影在线观看| 在线播放成人| 亚洲男男av| 国产午夜手机精彩视频| 国产精品久久国产精麻豆99网站| 亚洲电影第三页| 一级二级三级视频| 欧美日韩中文字幕综合视频| 国产精品一区二区三区四区五区| 亚洲免费av一区| 成av人片在线观看www| 九色porny丨入口在线| 亚洲理论在线观看| 日韩video| 亚洲午夜免费视频| 亚洲午夜在线观看视频在线| 亚洲伦乱视频| 国产精品一区二区久久不卡| 国产主播中文字幕| 午夜不卡久久精品无码免费| 手机在线成人免费视频| 东北少妇不带套对白| 久久综合色之久久综合| 91成人在线视频| 日本一区视频在线播放| 国产综合自拍| 玩弄中年熟妇正在播放| 中文字幕欧美一区二区| 欧美精品一区二区三区免费播放| 2023av视频| 日韩va欧美va亚洲va久久| 调教视频免费在线观看| 久久精品亚洲人成影院| 亚洲精品v亚洲精品v日韩精品| 999国产精品视频免费| 亚洲成av人影院在线观看| 欧美日韩一卡二卡三卡| 欧美xxxx性xxxxx高清视频| 国产亚洲美女精品久久久| 亚洲经典一区二区| 国产人妖一区二区| 亚洲综合网狠久久| 在线播放中文字幕| 精品久久久国产| 亚洲精品视频一区| 国产福利在线| 2020欧美日韩在线视频| 99er热精品视频| 中文字幕在线观看不卡视频| 国产成人无码a区在线观看视频| 中文字幕在线视频第一页| 在线播放的av| 成人久久久精品乱码一区二区三区| 日本成人黄色片| 国产欧美日韩在线| 久久在线观看视频| 久久99热精品| 成人福利一区| 99久久久久国产精品| 久久精品99国产精品| 亚洲小少妇裸体bbw| 伦理天堂电影| 日韩精品成人一区二区在线| 久久久久亚洲av成人无码电影| 蜜桃一区二区三区四区| 2020国内自拍视频| 欧美福利视频网站| 中文久久精品| 成人网在线免费视频| 久久久久高清| 一个人免费观看日本www视频| 欧美噜噜久久久xxx| 欧美色涩在线第一页| 欧美日韩一区二区三区视频| 污视频在线观看网站| 亚洲欧洲日产国产综合网| 精品这里只有精品| 一本到不卡精品视频在线观看| 老司机免费视频一区二区三区| 欧美www视频在线观看| 亚洲精品永久视频| 国产一区高清在线| 亚洲成人1区2区| 一区二区三区四区日本视频| 成人欧美一区二区三区在线| 老鸭窝毛片一区二区三区| 日韩在线视频二区| 最新国产一区| 日本精品www| 欧美国产高潮xxxx1819| 国产99re66在线视频| 热久久这里只有精品| 中国特黄一级片| 日本少妇激三级做爰在线| 污黄视频在线观看| gogogo免费视频观看亚洲一| 精品久久久久久国产| 涩涩视频网站| 亚洲精品美女久久久| 久久九九国产视频| 亚洲av无日韩毛片久久| 久草一区二区| 欧美刺激性大交免费视频| 成人伊人精品色xxxx视频| 欧美精品影院| 欧美精品一级二级三级| 欧美aaaa视频| 午夜欧美大片免费观看| 欧美激情视频在线观看| 天天爱天天色| 亚洲一区二区三区777| 精品欧美色视频网站在线观看| 亚洲网站视频福利| 日本道色综合久久| av一卡二卡| 六月丁香综合网| 99视频在线免费| 亚洲国产欧美国产综合一区| 无码人妻精品一区二区三应用大全| av在线不卡网| 波多野结衣家庭教师在线| 亚洲性无码av在线| 丁香网亚洲国际| 韩国一区二区三区在线观看| h网站视频在线观看| 天天综合天天做天天综合| 国产原创在线观看| 香蕉视频久久久| 91视频精品| 色综合色狠狠综合色| 国产污在线观看| 国产亚洲精品免费| 开心婷婷激情五月| www.xxxx日本| 国产精品免费在线免费| 欧美唯美清纯偷拍| 中国黄色录像片| 女人香蕉久久**毛片精品| 亚洲一区中文字幕永久在线| 麻豆tv入口在线看| 91丨国产丨九色丨pron| 四虎影视18库在线影院| 91精品福利| 免费网站观看电影入口| 一区二区三区天堂av| 粉嫩一区二区三区四区公司1| 国产精品一国产精品| 亚洲国产aⅴ精品一区二区| 免费成人黄色网| 自拍视频国产精品| av7777777| 亚洲国产日韩精品| 欧美激情精品久久久久久大尺度| 国产丶欧美丶日本不卡视频| 欧美激情亚洲| 亚洲一二三四2021不卡| 日韩高清精品免费观看| 国产999精品在线观看| 日韩乱码一区二区| 亚洲精品中文在线影院| 99蜜桃臀久久久欧美精品网站| 久久久亚洲综合| 亚洲精品美女视频| 一区二区三区在线播放视频|