主頁 > 知識庫 > 在ASP.NET 2.0中操作數(shù)據(jù)之七十三:用Managed Code創(chuàng)建存儲過程和用戶自定義函數(shù)(上部分)

在ASP.NET 2.0中操作數(shù)據(jù)之七十三:用Managed Code創(chuàng)建存儲過程和用戶自定義函數(shù)(上部分)

熱門標(biāo)簽:蘇州如何辦理400電話 西寧呼叫中心外呼系統(tǒng)線路商 百應(yīng)電話機(jī)器人外呼系統(tǒng) 臨沂智能電話機(jī)器人加盟 地圖標(biāo)注軟件免費(fèi)下載 外呼電話機(jī)器人成本 400電話辦理怎么樣 網(wǎng)絡(luò)電話外呼系統(tǒng)上海 聯(lián)通官網(wǎng)400電話辦理

導(dǎo)言:

  數(shù)據(jù)庫,比如Microsoft's SQL Server 2005使用Transact-Structured Query Language (T-SQL)來插入、修改、檢索數(shù)據(jù).絕大多數(shù)數(shù)據(jù)庫系統(tǒng)都包含constructs來對一系列的SQL statements進(jìn)行分組,這些statements可以作為單獨(dú)的單元來執(zhí)行.存儲過程就是一個例子,另一個例子是用戶自定義函數(shù)(UDFs), 我們將在第9步進(jìn)行詳細(xì)的探討.

  SQL是設(shè)計(jì)來處理一系列數(shù)據(jù)的. SELECT,UPDATE,和DELETE statements適用于相應(yīng)表的所有記錄,且通過WHERE字句來進(jìn)行篩選.也有很多的特性被設(shè)計(jì)來一次處理一條記錄,或操作標(biāo)量數(shù)據(jù)(scalar data).比如CURSORs允許一次遍歷所有的記錄.字符串操作功能,比如LEFT, CHARINDEX, 以及PATINDEX用來處理標(biāo)量數(shù)據(jù).SQL也包含了控制流聲明,比如IF和WHILE.

  在Microsoft SQL Server 2005之前,存儲過程和用戶自定義函數(shù)UDFs只能當(dāng)做一個T-SQL statements集來創(chuàng)建,而SQL Server 2005設(shè)計(jì)時包含Common Language Runtime (CLR)。因此,對一個SQL Server 2005數(shù)據(jù)庫里的存儲過程和用戶定義方法,我們可以用managed code來進(jìn)行創(chuàng)建。那就也說你可以在一個C#類里創(chuàng)建一個存儲過程或用戶定義函數(shù).這樣一來我們就可以在.NET Framework或你自己定義的類里面使用這些存儲過程或方法.

在本文我們將考察如何創(chuàng)建存儲過程和用戶定義函數(shù),以及如何將它們整合進(jìn)數(shù)據(jù)庫Northwind.讓我們開始吧。

  注意:管理數(shù)據(jù)庫對象(Managed database objects)與SQL數(shù)據(jù)庫里包含的相對應(yīng)的數(shù)據(jù)庫對象比較起來有一些優(yōu)勢,主要體現(xiàn)在:使用的語言更豐富、熟悉;可以使用現(xiàn)有的代碼和邏輯.但是在處理那些并不包含很多邏輯的一系列數(shù)據(jù)時,其效率可能要低一些.關(guān)與managed code相較T-SQL而言的優(yōu)勢,請參閱文章《Advantages of Using Managed Code to Create Database Objects》(http://msdn2.microsoft.com/en-us/library/k2e1fb36(VS.80).aspx)

第一步:將Northwind數(shù)據(jù)庫移出App_Data文件夾

  本教程到目前為止使用的是放在App_Data文件夾里的Microsoft SQL Server 2005 Express版本的數(shù)據(jù)庫.

  然而在本教程,我們將Northwind數(shù)據(jù)庫移出App_Data文件夾,再使用一個被注冊為SQL Server 2005 Express版本數(shù)據(jù)庫的實(shí)例。雖然我們不移出的話也可以執(zhí)行本文的這些步驟,不過將其注冊為一個SQL Server 2005 Express版本數(shù)據(jù)庫的實(shí)例的話,這些步驟就要簡單的多了。

  本文下載代碼里包含2個數(shù)據(jù)庫文件:NORTHWND.MDF 和 NORTHWND_log.LDF,將它們放在一個叫DataFiles的文件夾里,先關(guān)閉Visual Studio,再將NORTHWND.MDF 和 NORTHWND_log.LDF文件從根目錄的App_Data文件夾里移出到根目錄以外的其它文件夾里。完成后,我們需要將Northwind數(shù)據(jù)庫注冊為SQL Server 2005 Express版本數(shù)據(jù)庫的實(shí)例。為此我們要用到SQL Server Management Studio.如果你沒有安裝的話,可以在此下載并安裝:(http://www.microsoft.com/downloads/details.aspx?displaylang=enFamilyID=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796)。

  打開SQL Server Management Studio,如圖1所示,Management Studio首先問我們連接什么服務(wù)器,在server name里鍵入“l(fā)ocalhost/SQLExpress” ,在Authentication下拉列表里選“Windows Authentication” 。點(diǎn)Connect.


圖1:連接恰當(dāng)?shù)臄?shù)據(jù)庫實(shí)例

  一旦連接后,Object Explorer窗口將會把SQL Server 2005 Express版本數(shù)據(jù)庫實(shí)例的信息顯示出來,比如databases, security information, management options等.

  我們需要將DataFiles文件夾里的Northwind數(shù)據(jù)庫作為SQL Server 2005 Express版本數(shù)據(jù)庫實(shí)例。在Databases文件夾里右鍵單擊,選“Attach”項(xiàng)。這將打開Attach Databases對話框.點(diǎn) Add 按鈕,找到NORTHWND.MDF文件,再點(diǎn)OK。這樣,你的屏幕看起來和圖2差不多:


圖2:連接到合適的數(shù)據(jù)庫實(shí)例

  注意:當(dāng)通過Management Studio連接到SQL Server 2005 Express版本的數(shù)據(jù)庫實(shí)例時,Attach Databases對話框不允許你瀏覽用戶私人文件目錄(user profile directories),比如My Documents.因此,一定要將NORTHWND.MDF 和 NORTHWND_log.LDF文件放在一個非用戶私人文件目錄里.

  點(diǎn)OK完成后,Attach Databases對話框?qū)P(guān)閉,Object Explorer將會將新添加的數(shù)據(jù)庫列出來。問題來了,它的名字可能是這樣的:9FE54661B32FDD967F51D71D0D5145CC_LINE ARTICLES/DATATUTORIALS/VOLUME 3/CSHARP/73/ASPNET_DATA_TUTORIAL_75_CS/APP_DATA/NORTHWND.MDF,我們將其重命名為“Northwind”,方法是在該數(shù)據(jù)庫右鍵單擊,選“Rename”.


圖3:將數(shù)據(jù)庫重命名為“Northwind”

第二步:在Visual Studio里創(chuàng)建一個新的解決方案和SQL Server Project

  要在SQL Server 2005里創(chuàng)建管理存儲過程或用戶定義函數(shù),我們要在一個類里用C# 代碼寫這些存儲過程和用戶定義函數(shù)。一旦寫完后,我們需要將該類編譯為一個 .dll文件,將該編譯文件注冊到一個SQL Server 數(shù)據(jù)庫,然后在數(shù)據(jù)庫里創(chuàng)建一個存儲過程或用戶定義函數(shù)以指向編譯文件里對應(yīng)的方法。這些步驟要手工完成。我們可以在文本編輯器里寫代碼,在命令行里用C#編譯器 (csc.exe)對其進(jìn)行編譯;用CREATE ASSEMBLY 命令或從Management Studio里將其注冊到數(shù)據(jù)庫.添加存儲過程或用戶定義函數(shù)的方法類似.幸運(yùn)的是 Visual Studio的Professional 和 Team Systems 版本包含一個SQL Server Project類型,它可以自動的完成這些工作.在本文,我們將使用SQL Server Project類型來創(chuàng)建一個管理存儲過程和用戶定義函數(shù)。

  注意:如果你使用的是Visual Studio的Visual Web Developer 或 Standard版本,你就要手動完成了。在Step 13,我們將詳細(xì)介紹手動完成的細(xì)節(jié).我們鼓勵你從Steps 2 看到Steps 12 ,再看Step 13.因?yàn)镾teps 2 到Steps 12包含了很重要的SQL Server 配置說明,不管你用的是什么版本.

  打開Visual Studio. 從 File 菜單,選New Project以打開New Project對話框(見圖4).點(diǎn)到Database工程類型,在右邊的Templates列表,選擇創(chuàng)建一個新的SQL Server Project.我將其命名為ManagedDatabaseConstructs并放在一個名為Tutorial75的解決方案里.


圖4:創(chuàng)建一個新的SQL Server Project

  在New Project對話框里點(diǎn)OK按鈕,創(chuàng)建該解決方案和SQL Server Project.

  一個SQL Server Project依賴于一個具體的數(shù)據(jù)庫.因此,接下來我們要指定該信息。如圖5所示,New Database Reference對話框里指向了Northwind數(shù)據(jù)庫,也就是我們在第一步里注冊的SQL Server 2005 Express版本數(shù)據(jù)庫實(shí)例.


圖5:將SQL Server Project與Northwind數(shù)據(jù)庫聯(lián)系起來

  為了對我們將要在本工程創(chuàng)建的管理存儲過程和用戶自定義函數(shù)進(jìn)行調(diào)試,我們需要激活SQL/CLR調(diào)試支持.無論什么時候?qū)⒁粋€SQL Server Project與新的數(shù)據(jù)庫聯(lián)系起來時(就像我們在圖5做的那樣),Visual Studio會詢問我們是否激活SQL/CLR調(diào)試(如圖6),選Yes.


圖6:激活SQL/CLR調(diào)試

  此時,這個新的SQL Server Project已經(jīng)添加到解決方案里了。其包含一個Test Scripts文件夾,文件夾里是一個Test.sql文件。它用來對本工程添加的管理數(shù)據(jù)庫對象進(jìn)行調(diào)試,我們將在第12步考察調(diào)試.

  我們現(xiàn)在可以對該工程添加新的管理存儲過程和用戶自定義函數(shù).不過在此之前,我們要將現(xiàn)有的web應(yīng)用程序包含進(jìn)解決方案。在 File 菜單里選Add項(xiàng),再選Existing Web Site.瀏覽到相應(yīng)的文件夾,點(diǎn)OK.如圖7所示,這將更新解決方案以包含2個工程:即website和名為ManagedDatabaseConstructs的SQL Server Project.


圖7:該解決方案現(xiàn)在包含2個工程

  Web.config文件里的NORTHWNDConnectionString值當(dāng)前引用的是App_Data文件夾里的NORTHWND.MDF。由于我們已經(jīng)將其從App_Data文件夾移出了,其注冊為SQL Server 2005 Express版本數(shù)據(jù)庫實(shí)例,因此我們需要相應(yīng)的更新NORTHWNDConnectionString值。打開Web.config文件,改動NORTHWNDConnectionString值,像這樣:“Data Source=localhost/SQLExpress;Initial Catalog=Northwind;Integrated Security=True”.

  完成后,你的Web.config文件的connectionStrings>節(jié)點(diǎn)看起來和下面的差不多:

connectionStrings>
 add name="NORTHWNDConnectionString" connectionString=
  "Data Source=localhost/SQLExpress;Initial Catalog=Northwind;
   Integrated Security=True;Pooling=false"
  providerName="System.Data.SqlClient" />
/connectionStrings>

  注意:就像在上一章探討的一樣,當(dāng)從一個客戶端程序——比如一個ASP.NET website,調(diào)試一個SQL Server對象時,我們需要關(guān)閉連接池。上面的連接字符串里我們關(guān)閉了連接池(“Pooling=false”). 如果你不打算從ASP.NET website調(diào)試管理存儲過程和用戶自定義函數(shù)的話,激活連接池.

第三步:創(chuàng)建一個Managed Stored Procedure

  要向Northwind數(shù)據(jù)庫添加一個管理存儲過程的話,我們首先要創(chuàng)建一個存儲過程作為該SQL Server Project里的一個方法。從解決資源管理器里,右鍵單擊 ManagedDatabaseConstructs工程,選“添加新項(xiàng)”,這將展示Add New Item 對話框,其列出了可以添加到該工程的各種管理數(shù)據(jù)庫對象的類型,如圖8所示,包括stored procedures 、User-Defined Functions等.我們來創(chuàng)建一個存儲過程,用來簡單的將那些處于discontinued狀態(tài)的產(chǎn)品返回,將該存儲過程文件命名為GetDiscontinuedProducts.cs.


圖8:添加一個新的存儲過程,名為GetDiscontinuedProducts.cs

這將創(chuàng)建一個新的C# class類文件,如下:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public partial class StoredProcedures
{
 [Microsoft.SqlServer.Server.SqlProcedure]
 public static void GetDiscontinuedProducts()
 {
  // Put your code here
 }
}

  我們注意到該存儲過程作為一個static方法來執(zhí)行,且位于一個名為StoredProcedures的部分類(partial class)文件之內(nèi). 此外,該 GetDiscontinuedProducts方法有一個SqlProcedure特性, 這就標(biāo)明了該方法是一個存儲過程.

  下面的代碼創(chuàng)建了一個SqlCommand對象,設(shè)其CommandText為一個SELECT查詢,以返回Products table表里所有Discontinued列為1的記錄.它然后執(zhí)行該命令并將結(jié)果返回給客戶端程序.添加這些代碼到GetDiscontinuedProducts方法.

// Create the command
SqlCommand myCommand = new SqlCommand();
myCommand.CommandText =
  @"SELECT ProductID, ProductName, SupplierID, CategoryID,
    QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
    ReorderLevel, Discontinued
  FROM Products
  WHERE Discontinued = 1";

 
// Execute the command and send back the results
SqlContext.Pipe.ExecuteAndSend(myCommand);

  所有的管理數(shù)據(jù)庫對象都可以使用SqlContext對象,該對象展示“調(diào)用者”(caller)的內(nèi)容;而SqlContext又可以通過其Pipe屬性來訪問一個SqlPipe對象,該對象用來在SQL Server數(shù)據(jù)庫和調(diào)用程序之間傳遞信息;而ExecuteAndSend方法,就像其名字暗示的那樣,執(zhí)行傳入的SqlCommand對象,并將結(jié)果返回給客戶端程序.

  注意:管理數(shù)據(jù)庫對象最適合做這種存儲過程和用戶定義函數(shù)——使用procedural logic邏輯而不是set-based logic邏輯.所謂Procedural logic邏輯包括處理一系列一行行(on a row-by-row basis)的數(shù)據(jù)或者處理標(biāo)量數(shù)據(jù)(scalar data).然而,我們剛剛創(chuàng)建的GetDiscontinuedProducts方法,并未使用Procedural logic邏輯。其實(shí)該方法最理想的是作為一個T-SQL存儲過程來執(zhí)行.之所以作為一個管理存儲過程來執(zhí)行,是為了示范創(chuàng)建和配置管理存儲過程所必要的步驟.

步驟4:配置Managed Stored Procedure

  代碼完成后我們準(zhǔn)備將其配置給Northwind數(shù)據(jù)庫.“Deploy”項(xiàng)執(zhí)行的具體步驟我們將在第13步講明白。進(jìn)入解決資源管理器,在ManagedDatabaseConstructs工程名上右鍵單擊,選“Deploy”項(xiàng),然而,可能會出現(xiàn)如下的錯誤消息:“Incorrect syntax near 'EXTERNAL'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the stored procedure sp_dbcmptlevel.”

  該出錯信息發(fā)生試圖將編譯文件注冊到Northwind數(shù)據(jù)庫時.為了將一個編譯文件注冊到一個SQL Server 2005數(shù)據(jù)庫,該數(shù)據(jù)庫的compatibility level必須設(shè)置為90.默認(rèn)下,一個新的SQL Server 2005數(shù)據(jù)庫的compatibility level為90.而Microsoft SQL Server 2000使用的數(shù)據(jù)庫的默認(rèn)compatibility level為80.由于使用的Northwind數(shù)據(jù)庫最初是一個Microsoft SQL Server 2000數(shù)據(jù)庫,其compatibility level被設(shè)置為80,因此需要設(shè)置為90以便于進(jìn)行注冊.要更新數(shù)據(jù)庫的compatibility level,在Management Studio里打開一個New Query窗口,輸入:exec sp_dbcmptlevel 'Northwind', 90點(diǎn)擊工具欄上的執(zhí)行圖標(biāo)以運(yùn)行上述查詢.


圖9:更新Northwind數(shù)據(jù)庫的Compatibility Level

  更新后重新部署該SQL Server Project,這次應(yīng)該不會出錯了.返回SQL Server Management Studio,在Object Explorer里的Northwind 數(shù)據(jù)庫上右鍵單擊,選“刷新”.接下來,找到Programmability文件夾,再展開Assemblies文件夾。如圖10所示,Northwind數(shù)據(jù)庫現(xiàn)在包含了一個由ManagedDatabaseConstructs工程生成的編譯文件.


圖10:該ManagedDatabaseConstructs編譯文件現(xiàn)在注冊到Northwind數(shù)據(jù)庫

  也來打開Stored Procedures文件夾。你將會看到名為GetDiscontinuedProducts的存儲過程。該存儲過程是在部署的時候創(chuàng)建的,它指向ManagedDatabaseConstructs編譯文件里的GetDiscontinuedProducts方法.當(dāng)執(zhí)行GetDiscontinuedProducts存儲過程時,它反過來執(zhí)行GetDiscontinuedProducts方法.由于它是一個管理存儲過程(managed stored procedure),不能通過Management Studio來對其進(jìn)行編輯(因此,在存儲過程名旁邊有一個鎖的圖標(biāo))


圖11:GetDiscontinuedProducts存儲過程展示在Stored Procedures文件夾

  還有一個障礙要克服:該數(shù)據(jù)庫被配置為阻止執(zhí)行managed code.我們來做一個實(shí)驗(yàn)。打開一個new query窗口,執(zhí)行GetDiscontinuedProducts存儲過程.你將會收到如下的錯誤信息:“Execution of user code in the .NET Framework is disabled. Enable ‘clr enabled'configuration option.”

  讓我們檢查Northwind數(shù)據(jù)庫的配置信息,在查詢窗口鍵入并運(yùn)行命令“exec sp_configure”。其顯示“clr enabled”目前設(shè)置為0.


圖12:“clr enabled”目前設(shè)置為0.

  我們注意到每條配置(如圖12)都有4個值:“minimum”、“maximum”、“config”、“run” 值.要更新“clr enabled”配置的“config”值,執(zhí)行如下的命令:exec sp_configure 'clr enabled', 1

  如果你再運(yùn)行“exec sp_configure”的話,你將看到上述聲明將“clr enabled”配置的“config”值設(shè)為1,而“run”值仍然為0.因此,我們需要執(zhí)行RECONFIGURE命令,它將會把“ run”值設(shè)為目前的“config”值.在查詢窗口輸入“RECONFIGURE”,再點(diǎn)工具欄上的執(zhí)行圖標(biāo).如果你運(yùn)行“exec sp_configure”的話,現(xiàn)在你可以看到“clr enabled”配置的“config” 和 “run”值都為1.

  完成“clr enabled”配置后,我們準(zhǔn)備運(yùn)行GetDiscontinuedProducts存儲過程.在查詢窗口鍵入并運(yùn)行命令“exec GetDiscontinuedProducts”.調(diào)用該存儲過程將導(dǎo)致執(zhí)行GetDiscontinuedProducts方法里相應(yīng)的managed code.代碼發(fā)出一個SELECT查詢并返回所有處于discontinued狀況的產(chǎn)品,并將數(shù)據(jù)返回給調(diào)用程序——具體到本例,就是SQL Server Management Studio.Management Studio將接收到的數(shù)據(jù)展示在Results窗口.


圖13:GetDiscontinuedProducts存儲過程返回所有處于Discontinued狀態(tài)的產(chǎn)品

第五步:創(chuàng)建接收輸入?yún)?shù)的Managed Stored Procedures

  我們在本教程創(chuàng)建的很多查詢和存儲過程都使用參數(shù).比如,在第67章,我們創(chuàng)建了一個名為GetProductsByCategoryID的存儲過程,它接收一個名為@CategoryID的輸入?yún)?shù).該存儲過程返回那些其CategoryID值與@CategoryID吻合的產(chǎn)品.

  要創(chuàng)建接收輸入?yún)?shù)的managed stored procedure,僅僅在定義方法時指定這些參數(shù)即可.我們來做個演示,在ManagedDatabaseConstructs工程里添加一個名為GetProductsWithPriceLessThan的另一個managed stored procedure.該managed stored procedure接收一個指定了價格的參數(shù),返回所有的其UnitPrice列低于參數(shù)值的產(chǎn)品.

  我們來進(jìn)行添加.在ManagedDatabaseConstructs工程名上右鍵單擊,選“添加新存儲過程”.將文件命名為GetProductsWithPriceLessThan.cs.就像我們在圖3看到的那樣,這將創(chuàng)建一個新的C# class類文件.

  更新GetProductsWithPriceLessThan方法以使其接收一個名叫price的SqlMoney類型的輸入?yún)?shù).代碼如下:

[Microsoft.SqlServer.Server.SqlProcedure]
public static void GetProductsWithPriceLessThan(SqlMoney price)
{
 // Create the command
 SqlCommand myCommand = new SqlCommand();
 myCommand.CommandText =
   @"SELECT ProductID, ProductName, SupplierID, CategoryID,
     QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
     ReorderLevel, Discontinued
   FROM Products
   WHERE UnitPrice  @MaxPrice";

 myCommand.Parameters.AddWithValue("@MaxPrice", price);

 // Execute the command and send back the results
 SqlContext.Pipe.ExecuteAndSend(myCommand);
}

  GetProductsWithPriceLessThan方法的生命代碼和我們在第三步創(chuàng)建的GetDiscontinuedProducts方法的聲明代碼很相似.唯一的不同在于GetProductsWithPriceLessThan方法接收一個輸入?yún)?shù)(price), 且SqlCommand的查詢里也包含了一個參數(shù)(@MaxPrice).

  完成代碼添加后,重新部署SQL Server Project.接下來,返回到SQL Server Management Studio并刷新Stored Procedures文件夾.你將會看到一個新的查詢——GetProductsWithPriceLessThan.從查詢窗口,鍵入并執(zhí)行命令“exec GetProductsWithPriceLessThan 25”,它會將所有價格低于25的產(chǎn)品顯示出來,如圖14所示.


圖14:價格低于25的產(chǎn)品都顯示出來

第六步:從數(shù)據(jù)訪問層調(diào)用Managed Stored Procedure

  此時,我們已經(jīng)向ManagedDatabaseConstructs工程添加了GetDiscontinuedProducts 和 GetProductsWithPriceLessThan這2個managed stored procedures,并把它們注冊到Northwind SQL Server數(shù)據(jù)庫.我們同樣從SQL Server Management調(diào)用它們(見圖13和14)。為了使我們的ASP.NET應(yīng)用程序能調(diào)用這些managed stored procedures,因此我們需要將它們添加到體系的數(shù)據(jù)訪問層和業(yè)務(wù)邏輯層.在這一步,我們向類型化數(shù)據(jù)集NorthwindWithSprocs的ProductsTableAdapter添加2個新的方法.在第七步,我們將添加相應(yīng)的方法到業(yè)務(wù)邏輯層.

  在Visual Studio里打開類型化數(shù)據(jù)集NorthwindWithSprocs,向ProductsTableAdapter添加一個名為GetDiscontinuedProducts的方法.

  注意:由于我們已經(jīng)將Northwind數(shù)據(jù)庫移出了App_Data文件夾,所以我們應(yīng)該在Web.config文件里對連接字符串進(jìn)行相應(yīng)的更新。在第二步我們探討了更新Web.config文件里的NORTHWNDConnectionString的值.如果你忘記了更新的話,當(dāng)你試圖向TableAdapter添加新方法的時候,你將看到這樣的錯誤信息:“Failed to add query. Unable to find connection ‘NORTHWNDConnectionString' for object ‘Web.config'”.要克服這個問題, 需要更新Web.config文件的NORTHWNDConnectionString值.就像在第二步探討的那樣,再重新向TableAdapter添加新方法,這次就不會出錯了.

  添加新方法的時候,TableAdapter查詢配置向?qū)紫仍儐栁覀內(nèi)绾卧L問數(shù)據(jù)庫。由于我們已經(jīng)創(chuàng)建并注冊了GetDiscontinuedProducts存儲過程,因此選“Use existing stored procedure”項(xiàng),點(diǎn)Next.


圖15:選“Use existing stored procedure” 項(xiàng)

接下來要我們選要調(diào)用的存儲過程。在左邊下拉列表里選存儲過程GetDiscontinuedProducts.


圖16:選GetDiscontinuedProducts存儲過程

由于GetDiscontinuedProducts將返回一系列的記錄行,我們選第一項(xiàng)(“Tabular data”) ,再點(diǎn)Next.


圖17: 選“Tabular Data” 項(xiàng)


最后,向?qū)б覀優(yōu)榉椒?,選中這2項(xiàng)并分別命名為FillByDiscontinued 和 GetDiscontinuedProducts.點(diǎn)Finish完成向?qū)?


圖18:將方法命名為FillByDiscontinued 和 GetDiscontinuedProducts

采用同樣的方法,為名為GetProductsWithPriceLessThan的managed stored procedure在ProductsTableAdapter里添加FillByPriceLessThan和 GetProductsWithPriceLessThan這2個方法.

圖19顯示的是為GetDiscontinuedProducts 和 GetProductsWithPriceLessThan這2個managed stored procedures在ProductsTableAdapter里添加各種方法后的界面.


圖19: ProductsTableAdapter包含了新添加的方法

第七步:向業(yè)務(wù)邏輯層添加相應(yīng)的方法

  現(xiàn)在我們已經(jīng)更新了數(shù)據(jù)訪問層,我們還需要向業(yè)務(wù)邏輯層添加相應(yīng)的方法.向ProductsBLLWithSprocs class類添加如下的2種方法:

[System.ComponentModel.DataObjectMethodAttribute
 (System.ComponentModel.DataObjectMethodType.Select, false)]
public NorthwindWithSprocs.ProductsDataTable GetDiscontinuedProducts()
{
 return Adapter.GetDiscontinuedProducts();
}

[System.ComponentModel.DataObjectMethodAttribute
 (System.ComponentModel.DataObjectMethodType.Select, false)]
public NorthwindWithSprocs.ProductsDataTable
 GetProductsWithPriceLessThan(decimal priceLessThan)
{
 return Adapter.GetProductsWithPriceLessThan(priceLessThan);
}

  這2種方法都簡單的調(diào)用數(shù)據(jù)訪問層對應(yīng)的方法,并返回ProductsDataTable實(shí)例.而2種方法上面附加的DataObjectMethodAttribute標(biāo)記的作用是將方法包含到 ObjectDataSource控件的配置數(shù)據(jù)源向?qū)У腟ELECT標(biāo)簽里的下拉列表項(xiàng)里. (上部分完)

  祝編程快樂!

作者簡介

  本系列教程作者 Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創(chuàng)始人,自1998年以來一直應(yīng)用 微軟Web技術(shù)。大家可以點(diǎn)擊查看全部教程《[翻譯]Scott Mitchell 的ASP.NET 2.0數(shù)據(jù)教程》,希望對大家的學(xué)習(xí)ASP.NET有所幫助。

您可能感興趣的文章:
  • asp.net 結(jié)合mysql存儲過程進(jìn)行分頁代碼
  • asp.net安全、實(shí)用、簡單的大容量存儲過程分頁
  • asp.net 存儲過程調(diào)用
  • asp.net結(jié)合aspnetpager使用SQL2005的存儲過程分頁
  • asp.net sql存儲過程
  • 在ASP.NET中用存儲過程執(zhí)行SQL語句
  • asp.net利用存儲過程和div+css實(shí)現(xiàn)分頁(類似于博客園首頁分頁)
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十五:在TableAdapters中創(chuàng)建新的存儲過程
  • 在ASP.NET 2.0中操作數(shù)據(jù)之六十六:在TableAdapters中使用現(xiàn)有的存儲過程
  • 在ASP.NET 2.0中操作數(shù)據(jù)之七十二:調(diào)試存儲過程

標(biāo)簽:聊城 臨夏 清遠(yuǎn) 慶陽 海西 甘肅 中衛(wèi)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《在ASP.NET 2.0中操作數(shù)據(jù)之七十三:用Managed Code創(chuàng)建存儲過程和用戶自定義函數(shù)(上部分)》,本文關(guān)鍵詞  在,ASP.NET,2.0,中,操作,數(shù)據(jù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《在ASP.NET 2.0中操作數(shù)據(jù)之七十三:用Managed Code創(chuàng)建存儲過程和用戶自定義函數(shù)(上部分)》相關(guān)的同類信息!
  • 本頁收集關(guān)于在ASP.NET 2.0中操作數(shù)據(jù)之七十三:用Managed Code創(chuàng)建存儲過程和用戶自定義函數(shù)(上部分)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章