国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - ASP.NET教程 - 在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)

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

2020-01-10 16:00heker2007 ASP.NET教程

本文接著上篇主要講如何使用Managed Code創(chuàng)建用戶自定義函數(shù),Visual Studio的SQL Server Project類型可以很容易的創(chuàng)建、編譯、配置managed database objects,此外還支持多種調(diào)試.

第八步:從表現(xiàn)層調(diào)用Managed Stored Procedures

  當(dāng)對(duì)數(shù)據(jù)訪問層和業(yè)務(wù)邏輯層進(jìn)行擴(kuò)充以支持調(diào)用GetDiscontinuedProducts 和 GetProductsWithPriceLessThan這2種managed stored procedures后,我們可以在一個(gè)ASP.NET頁面里展示這些存儲(chǔ)過程的結(jié)果了.

  打開AdvancedDAL文件夾里的ManagedFunctionsAndSprocs.aspx頁面,從工具箱拖一個(gè)GridView控件到設(shè)計(jì)器,設(shè)其ID為DiscontinuedProducts,在其智能標(biāo)簽里綁定到一個(gè)名為DiscontinuedProductsDataSource的ObjectDataSource控件,設(shè)置其調(diào)用ProductsBLLWithSprocs class類的GetDiscontinuedProducts方法.

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖20:調(diào)用ProductsBLLWithSprocs Class類

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖21:在SELECT標(biāo)簽里調(diào)用GetDiscontinuedProducts方法

  由于我們只需要展示產(chǎn)品信息,在UPDATE, INSERT,和DELETE標(biāo)簽里選  “(None)”,再點(diǎn)Finish完成配置.完成后Visual Studio會(huì)為ProductsDataTable表的列自動(dòng)的添加BoundField列 或 CheckBoxField列. 將除ProductName和Discontinued以外的列全部刪除.這樣你的GridView 和 ObjectDataSource的聲明代碼看起來和下面的差不多:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<asp:GridView ID="DiscontinuedProducts" runat="server"
 AutoGenerateColumns="False" DataKeyNames="ProductID"
 DataSourceID="DiscontinuedProductsDataSource">
 <Columns>
 <asp:BoundField DataField="ProductName" HeaderText="ProductName"
  SortExpression="ProductName" />
 <asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"
 
SortExpression="Discontinued" />
 
 </Columns>
 
</asp:GridView>
 
<asp:ObjectDataSource ID="DiscontinuedProductsDataSource" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="GetDiscontinuedProducts" TypeName="ProductsBLLWithSprocs"> </asp:ObjectDataSource>

  花點(diǎn)時(shí)間在瀏覽器里登錄該頁面。當(dāng)?shù)卿洉r(shí),ObjectDataSource控件將調(diào)用ProductsBLLWithSprocs class類的 GetDiscontinuedProducts方法.就像我們?cè)诘谄卟娇吹降哪菢樱摲椒ㄓ终{(diào)用DAL層的ProductsDataTable class類的GetDiscontinuedProducts方法,該方法又調(diào)用存儲(chǔ)過程GetDiscontinuedProducts.該存儲(chǔ)過程返回那些處于“discontinued”狀態(tài)的產(chǎn)品. 存儲(chǔ)過程返回的結(jié)果填充到DAL層的一個(gè)ProductsDataTable,進(jìn)而返回給BLL,再返回給表現(xiàn)層并綁定到一個(gè)GridView控件展現(xiàn)出來.

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖22:“Discontinued”的產(chǎn)品被列出來了

  我們可以繼續(xù)加強(qiáng)練習(xí),比如在頁面上再放置一個(gè)TextBox控件和一個(gè)GridView控件。在TextBox控件里輸入一個(gè)數(shù),而GridView控件調(diào)用ProductsBLLWithSprocs class類的GetProductsWithPriceLessThan方法將價(jià)格低于該數(shù)的產(chǎn)品展示出來.

第九步:創(chuàng)建并調(diào)用T-SQL UDFs

  用戶自定義函數(shù)——簡(jiǎn)稱UDF,是一種數(shù)據(jù)庫對(duì)象,與編程語言里的函數(shù)定義很相仿.與C#里面的函數(shù)類似,UDF可以包含一系列的輸入?yún)?shù)并返回一個(gè)特定類型的值.一個(gè)UDF要么返回標(biāo)量數(shù)據(jù)(scalar data)——比如一個(gè)string, 一個(gè)integer等等;要么返回一個(gè)表列數(shù)據(jù)(tabular data).讓我們先快速的考察一下這2種類型的UDF,先從標(biāo)量數(shù)據(jù)類型開始.

  下面的UDF用于計(jì)算某個(gè)特定產(chǎn)品的總價(jià).其有3個(gè)輸入?yún)?shù)——UnitPrice, UnitsInStock,Discontinued.其返回一個(gè)money類型的值.它通過以UnitPrice乘以UnitsInStock來得到總價(jià),如是處于“discontinued”狀態(tài),則總價(jià)減半.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE FUNCTION udf_ComputeInventoryValue
(
 @UnitPrice money,
 @UnitsInStock smallint,
 @Discontinued bit
)
RETURNS money
AS
BEGIN
 DECLARE @Value decimal
 
 SET @Value = ISNULL(@UnitPrice, 0) * ISNULL(@UnitsInStock, 0)
 
 IF @Discontinued = 1
 SET @Value = @Value * 0.5
 
 RETURN @Value
END

  將該UDF添加到數(shù)據(jù)庫后,我們打開Management Studio,打開Programmability文件夾,再打開Functions文件夾,再打開Scalar-value Functions文件夾,就可以看到該UDF.我們可以在一個(gè)SELECT查詢里這樣來使用:

?
1
2
3
4
SELECT ProductID, ProductName, dbo.udf_ComputeInventoryValue
 (UnitPrice, UnitsInStock, Discontinued) as InventoryValue
FROM Products
ORDER BY InventoryValue DESC

  我已經(jīng)將該udf_ComputeInventoryValue用戶函數(shù)添加到了Northwind數(shù)據(jù)庫。圖23就是在Management Studio里調(diào)用上述SELECT查詢得到的輸出結(jié)果.

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖23:列出了每個(gè)產(chǎn)品的總價(jià)

UDF也可以返回表列數(shù)據(jù).比如,我們可以創(chuàng)建一個(gè)UDF返回屬于某個(gè)category的所有產(chǎn)品:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE FUNCTION dbo.udf_GetProductsByCategoryID
(
 @CategoryID int
)
RETURNS TABLE
AS
RETURN
(
 SELECT ProductID, ProductName, SupplierID, CategoryID,
  QuantityPerUnit, UnitPrice, UnitsInStock, UnitsOnOrder,
  ReorderLevel, Discontinued
 FROM Products
 WHERE CategoryID = @CategoryID
)

  該udf_GetProductsByCategoryID用戶函數(shù)接受一個(gè)@CategoryID輸入?yún)?shù),返回SELECT查詢的結(jié)果.一旦創(chuàng)建之后,該UDF就可以在SELECT查詢的FROM (或 JOIN)之句里引用.下面的示例返回飲料類所屬的每個(gè)產(chǎn)品的ProductID, ProductName,CategoryID值:

?
1
2
SELECT ProductID, ProductName, CategoryID
FROM dbo.udf_GetProductsByCategoryID(1)

  我已經(jīng)將該udf_GetProductsByCategoryID用戶函數(shù)添加到Northwind數(shù)據(jù)庫。圖24顯示的是在Management Studio運(yùn)行上述SELECT查詢的結(jié)果.返回表列數(shù)據(jù)的UDF放在Table-value Functions文件夾里.

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖24:飲料類產(chǎn)品的ProductID, ProductName,CategoryID都列出來了

  注意:關(guān)于創(chuàng)建和使用UDF的更多詳情,請(qǐng)參閱文章《Intro to User-Defined Functions》和《dvantages and Drawbacks of User-Defined Functions》

第十步:創(chuàng)建一個(gè)Managed UDF

  上面示例里創(chuàng)建的udf_ComputeInventoryValue和 udf_GetProductsByCategoryID用戶函數(shù)都是T-SQL數(shù)據(jù)庫對(duì)象.SQL Server 2005同樣支持managed UDF,我們可以將其添加到ManagedDatabaseConstructs工程,就像在第三和第五步做的那樣.在這一步,我們將用managed code執(zhí)行udf_ComputeInventoryValue用戶函數(shù).

  在解決資源管理器里右鍵單擊,選擇“Add a New Item”,在對(duì)話框里選User-Defined Function模板,將新UDF文件命名為udf_ComputeInventoryValue_Managed.cs.

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖25:向ManagedDatabaseConstructs工程添加一個(gè)Managed UDF

  該User-Defined Function模板將創(chuàng)建一個(gè)名為UserDefinedFunctions的partial class類,同時(shí)還有一個(gè)方法,該方法的名字與類文件的名字一樣(就本例而言,為udf_ComputeInventoryValue_Managed)。該方法有一個(gè)SqlFunction特性, 這就標(biāo)明了該方法是一個(gè)managed UDF.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;
 
public partial class UserDefinedFunctions
{
 [Microsoft.SqlServer.Server.SqlFunction]
 public static SqlString udf_ComputeInventoryValue_Managed()
 {
 // Put your code here
 return new SqlString("Hello");
 }
}

  該udf_ComputeInventoryValue方法目前返回一個(gè)SqlString對(duì)象,且不接受任何的輸入?yún)?shù).我們將對(duì)其進(jìn)行更新以包含3個(gè)參數(shù)——UnitPrice, UnitsInStock,和Discontinued,并返回一個(gè)SqlMoney對(duì)象.該方法用到邏輯與上面的T-SQL類型的udf_ComputeInventoryValue用戶函數(shù)的一樣.

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlMoney udf_ComputeInventoryValue_Managed
 (SqlMoney UnitPrice, SqlInt16 UnitsInStock, SqlBoolean Discontinued)
{
 SqlMoney inventoryValue = 0;
 
 if (!UnitPrice.IsNull && !UnitsInStock.IsNull)
 {
 inventoryValue = UnitPrice * UnitsInStock;
 
 if (Discontinued == true)
  inventoryValue = inventoryValue * new SqlMoney(0.5);
 }
 
 return inventoryValue;
}

  我們注意到UDF方法的輸入?yún)?shù)就是其對(duì)應(yīng)的SQL類型:UnitPrice的類型為SqlMoney、UnitsInStock的類型為SqlInt16、Discontinued的類型為SqlBoolean.這些類型反映了這些列在Products表里定義的類型:UnitPrice列的類型為money、UnitsInStock列的類型為smallint、Discontinued列的類型為bit.

  代碼首先創(chuàng)建了一個(gè)SqlMoney類型的名為inventoryValue的實(shí)例,并賦值為0.由于Products表允許UnitsInPrice 和 UnitsInStock列的值為NULL,因此我們首先通過SqlMoney對(duì)象的IsNull屬性來檢查這2列是否包NULL值。如果這2列的值都不為NULL,那么UnitPrice乘以UnitsInStock就得到了inventoryValue的值,另外如果Discontinued為true的話,inventoryValue的值減半.

  注意:由于SqlMoney對(duì)象只允許2個(gè)SqlMoney實(shí)例相乘,它不允許一個(gè)SqlMoney實(shí)例與一浮點(diǎn)數(shù)(literal floating-point)相乘,所以在代碼里我們用一個(gè)值為0.5的SqlMoney實(shí)例與inventoryValue相乘.

第11步驟:配置Managed UDF

  現(xiàn)在我們已經(jīng)創(chuàng)建了一個(gè)managed UDF,我們將把它配置給Northwind數(shù)據(jù)庫.就像我們?cè)诘谒牟娇吹降哪菢樱诮鉀Q資源管理器里,在工程名上右鍵單擊選“Deploy”.

完成后,返回到SQL Server Management Studio,刷新Scalar-valued Functions文件夾.你就會(huì)看到2個(gè)實(shí)體:

.dbo.udf_ComputeInventoryValue——在第九步創(chuàng)建的T-SQL UDF

.dbo.udf ComputeInventoryValue_Managed——我們?cè)诘?0步剛剛創(chuàng)建的managed UDF

對(duì)該managed UDF進(jìn)行測(cè)試,在Management Studio里執(zhí)行如下的查詢:

?
1
2
3
4
5
6
7
8
SELECT ProductID, ProductName,
 dbo.udf_ComputeInventoryValue_Managed(
   UnitPrice,
   UnitsInStock,
   Discontinued
  ) as InventoryValue
FROM Products
ORDER BY InventoryValue DESC

該命令使用的是udf ComputeInventoryValue_Managed函數(shù)而不是udf_ComputeInventoryValue函數(shù),但是輸出結(jié)果都一樣,可以查看圖23的截屏.

第12步:調(diào)試Managed Database Objects

  在第72章我們探討了通過Visual Studio調(diào)試SQL Server的3種模式:直接數(shù)據(jù)庫調(diào)試、應(yīng)用程序調(diào)試、通過SQL Server Project調(diào)試.Managed database objects不能用直接數(shù)據(jù)庫模式調(diào)試,不過可以從一個(gè)客戶端程序和SQL Server Project來調(diào)試.為了使調(diào)試正常工作,SQL Server 2005 數(shù)據(jù)庫要求必須允許SQL/CLR調(diào)試.記得當(dāng)我們最初創(chuàng)建ManagedDatabaseConstructs工程時(shí),Visual Studio詢問我們是否激活SQL/CLR調(diào)試(見第2步的圖6).我們可以在Server Explorer窗口里在數(shù)據(jù)庫上右鍵單擊,以對(duì)該配置進(jìn)行修改.

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖26:確保數(shù)據(jù)庫激活SQL/CLR調(diào)試

  設(shè)想我們想調(diào)試GetProductsWithPriceLessThan存儲(chǔ)過程.我們首先要在GetProductsWithPriceLessThan方法的代碼里設(shè)置斷點(diǎn).

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖27:在GetProductsWithPriceLessThan方法里設(shè)置斷點(diǎn)

  首先我們考察從SQL Server Project里調(diào)試managed database objects.

  由于我們的解決資源管理器里包含2個(gè)工程——ManagedDatabaseConstructs SQL Server Project以及我們的website.為了從SQL Server Project進(jìn)行調(diào)試,當(dāng)調(diào)試時(shí)我們需要引導(dǎo)Visual Studio開啟ManagedDatabaseConstructs SQL Server Project.在解決資源管理器里的ManagedDatabaseConstructs project上點(diǎn)擊右鍵,選“Set as StartUp Project”項(xiàng).

  當(dāng)從調(diào)試器打開ManagedDatabaseConstructs project時(shí),它執(zhí)行Test.sql文件的SQL statements,該文件位于Test Scripts文件夾.比如,要測(cè)試GetProductsWithPriceLessThan存儲(chǔ)過程的話,將Test.sql文件的內(nèi)容替換為下面的statement,這些statement調(diào)用GetProductsWithPriceLessThan存儲(chǔ)過程,其輸入?yún)?shù)@CategoryID的值為14.95:

?
1
exec GetProductsWithPriceLessThan 14.95

  一旦將上面的腳本鍵入Test.sql文件,點(diǎn)Debug菜單里的“Start Debugging”項(xiàng),或按F5或是工具欄上的綠色圖標(biāo)啟動(dòng)調(diào)試.這將在資源管理器里構(gòu)建工程,將該managed database objects配置給Northwind數(shù)據(jù)庫,然后執(zhí)行Test.sql腳本.此時(shí),將會(huì)遇到斷點(diǎn),我們可以進(jìn)入GetProductsWithPriceLessThan方法,檢查輸入?yún)?shù)的值等等.

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖28:碰到GetProductsWithPriceLessThan方法里的斷點(diǎn)

  為了從客戶端程序調(diào)試一個(gè)SQL database object,數(shù)據(jù)庫務(wù)必要配置為支持應(yīng)用程序調(diào)試.在服務(wù)器資源管理器里,在數(shù)據(jù)庫上右鍵單擊,確保選中“Application Debugging”項(xiàng)。另外,我們還要將ASP.NET應(yīng)用程序與SQL Debugger結(jié)合起來,而且關(guān)閉連接池.這些步驟我們?cè)诘?4章的第2步里詳細(xì)探討過了.

  一旦你配置完ASP.NET應(yīng)用程序和數(shù)據(jù)庫.設(shè)置ASP.NET website為啟動(dòng)方案.如果你登錄一個(gè)調(diào)用設(shè)置了斷點(diǎn)的managed objects的頁面的話,該程序就會(huì)碰到斷點(diǎn),并轉(zhuǎn)換到調(diào)試器,在調(diào)試器里你可以進(jìn)入代碼,就像圖28那樣.

第13步:手動(dòng)編譯并配置Managed Database Objects

  使用SQL Server Projects,我們可以很容易的創(chuàng)建、編譯、配置managed database objects.不過遺憾的是,只有在Visual Studio的Professional 和 Team Systems這2個(gè)版本才可以使用SQL Server Projects.如果你使用的是Visual Web Developer 或 Standard Edition版本,并且打算使用managed database objects的話,你需要手動(dòng)創(chuàng)建并配置它們.這將包括4個(gè)步驟:

1.創(chuàng)建一個(gè)文件來存放managed database object的源代碼

2.將object進(jìn)行編譯

3.將編譯文件注冊(cè)到SQL Server 2005數(shù)據(jù)庫

4.在SQL Server里創(chuàng)建一個(gè)數(shù)據(jù)庫對(duì)象,并指向編譯文件里的相應(yīng)的方法

  為便于演示,我們將創(chuàng)建一個(gè)新的managed stored procedure,返回那些UnitPrice值高于指定值的產(chǎn)品.在你的電腦上創(chuàng)建一個(gè)名為GetProductsWithPriceGreaterThan.cs 的新文件,并鍵入如下的代碼(你可以使用Visual Studio, Notepad或任何的文本編輯器來進(jìn)行):

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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 GetProductsWithPriceGreaterThan(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 > @MinPrice";
 
 myCommand.Parameters.AddWithValue("@MinPrice", price);
 
 // Execute the command and send back the results
 SqlContext.Pipe.ExecuteAndSend(myCommand);
 }
}

  這些代碼與我們?cè)诘谖宀絼?chuàng)建的GetProductsWithPriceLessThan方法的代碼很相似.唯一的不同在于:方法名不同、WHERE字句不同、以及查詢使用的參數(shù)名不同.返回到GetProductsWithPriceLessThan方法,其WHERE字句為“WHERE UnitPrice < @MaxPrice”. 而在這里,GetProductsWithPriceGreaterThan方法里,代碼為“WHERE UnitPrice > @MinPrice”.

  我們現(xiàn)在需要將該類進(jìn)行編譯.在命令行里導(dǎo)航到你存放GetProductsWithPriceGreaterThan.cs文件的根目錄,并使用C#編譯器(csc.exe)來進(jìn)行編譯:

?
1
csc.exe /t:library /out:ManuallyCreatedDBObjects.dll GetProductsWithPriceGreaterThan.cs

  如果包含csc.exe的文件夾沒有位于系統(tǒng)路徑,那你將必須完全引用其路徑,%WINDOWS%/Microsoft.NET/Framework/version/,比如:

?
1
C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/csc.exe /t:library /out:ManuallyCreatedDBObjects.dll GetProductsWithPriceGreaterThan.cs

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖29:對(duì)GetProductsWithPriceGreaterThan.cs文件進(jìn)行編譯

  其中,/t標(biāo)記指定將C# class類編譯為一個(gè)DLL(而不是可執(zhí)行文件)。而 /out標(biāo)記指定了編譯后文件的名稱.

  注意:除了用命令行來編譯GetProductsWithPriceGreaterThan.cs class類外,我們還可以使用Visual C# Express Edition或在Visual Studio Standard Edition版里創(chuàng)建一個(gè)單獨(dú)的Class Library project.S?ren Jacob Lauritsen為我們提供了一個(gè)Visual C# Express Edition project,它包含了GetProductsWithPriceGreaterThan存儲(chǔ)過程,以及我們?cè)诘?、5和10步里創(chuàng)建的那2個(gè)managed stored procedures 和 UDF.此外還包含了添加相應(yīng)數(shù)據(jù)庫對(duì)象必需的T-SQL commands.

  將代碼編譯完后,我們需要將其注冊(cè)到SQL Server 2005數(shù)據(jù)庫.可以通過T-SQL,使用命令CREATE ASSEMBLY,或通過SQL Server Management Studio. 我們來看使用Management Studio的情況.

  在Management Studio里,展開Northwind數(shù)據(jù)庫里的Programmability文件夾,其內(nèi)有一個(gè)Assemblies文件夾。在該文件夾上右鍵單擊,選“New Assembly”.這將開啟New Assembly對(duì)話框(見圖30),點(diǎn)擊Browse按鈕,選擇我們剛剛編譯的ManuallyCreatedDBObjects.dll文件,再點(diǎn)OK完成添加.在Object Explorer里你應(yīng)該可以看到ManuallyCreatedDBObjects.dll文件.

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖30:將ManuallyCreatedDBObjects.dll添加到數(shù)據(jù)庫

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖31:ManuallyCreatedDBObjects.dll展示在Object Explorer里


完成后,我們要將一個(gè)存儲(chǔ)過程與編譯文件里的GetProductsWithPriceGreaterThan方法聯(lián)系起來.為此,打開一個(gè)new query窗口,執(zhí)行下面的腳本:

?
1
2
3
4
5
6
7
8
CREATE PROCEDURE [dbo].[GetProductsWithPriceGreaterThan]
(
 @price [numeric](18, 0)
)
WITH EXECUTE AS CALLER
AS
EXTERNAL NAME [ManuallyCreatedDBObjects].[StoredProcedures].[GetProductsWithPriceGreaterThan]
GO

  這將在Northwind數(shù)據(jù)庫里創(chuàng)建一個(gè)名為etProductsWithPriceGreaterThan的新存儲(chǔ)過程,并將其與GetProductsWithPriceGreaterThan方法聯(lián)系起來(該方法屬于編譯文件ManuallyCreatedDBObjects)

  執(zhí)行完腳本后,在Object Explorer里刷新Stored Procedures文件夾。你將看到一個(gè)新的存儲(chǔ)過程——GetProductsWithPriceGreaterThan,在該存儲(chǔ)過程旁邊有一個(gè)鎖的圖標(biāo).測(cè)試該存儲(chǔ)過程,在查詢窗口鍵入并執(zhí)行如下的腳本:

exec GetProductsWithPriceGreaterThan 24.95

如圖32所示,上述命令將那些價(jià)格高于24.95的產(chǎn)品展示出來.

在ASP.NET 2.0中操作數(shù)據(jù)之七十四:用Managed Code創(chuàng)建存儲(chǔ)過程和用戶自定義函數(shù)(下部分)
圖32:在對(duì)象資源管理器的顯示的列表

結(jié)語:

  Microsoft SQL Server 2005整合了Common Language Runtime (CLR),它允許用managed code來創(chuàng)建數(shù)據(jù)庫對(duì)象.在以前,要?jiǎng)?chuàng)建數(shù)據(jù)庫對(duì)象,我們只能使用T-SQL, 但是現(xiàn)在我們可以使用.NET編程語言,比如C#來進(jìn)行創(chuàng)建. 在本文我們創(chuàng)建了2個(gè)managed stored procedures以及一個(gè)managed User-Defined Function.

  Visual Studio的SQL Server Project類型可以很容易的創(chuàng)建、編譯、配置managed database objects,此外還支持多種調(diào)試.遺憾的是,SQL Server Project類型只有在Visual Studio的Professional 和 Team Systems版本才有。對(duì)于Visual Web Developer 或Standard版的用戶而言,要手工完成這些步驟,就想我們?cè)诘?3步看到的那樣.

  祝編程快樂!

作者簡(jiǎn)介

  本系列教程作者 Scott Mitchell,著有六本ASP/ASP.NET方面的書,是4GuysFromRolla.com的創(chuàng)始人,自1998年以來一直應(yīng)用 微軟Web技術(shù)。希望對(duì)大家的學(xué)習(xí)ASP.NET有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: www.99热 | 国产精品a久久 | 国产视频第一页 | 精品免费在线 | 九九热精品视频在线观看 | 蜜桃视频一区二区 | 日韩一区在线播放 | 国产精品永久免费自在线观看 | 国产成人精品久久二区二区 | 日韩在线免费 | 欧美影院| 欧美日韩精品免费 | 精品一区二区久久久久久久网站 | 亚洲精品无码专区在线播放 | 国产精品久久久久久久久久东京 | 久久蜜桃精品一区二区三区综合网 | 欧美日韩精品在线观看 | 四虎综合网 | 亚洲精品欧美 | 久久综合久久综合久久 | 亚洲九九九 | 久久国产精品久久久久久电车 | 综合久久网 | 久久99精品国产99久久6尤 | 亚洲视频中文字幕 | 亚洲精品久久久一区二区三区 | 精品一区二区久久久久久久网站 | 国产精品久久久久久久久久久久冷 | 夜夜av| 在线中文字幕av | 中文字幕观看 | 精品国产一区二区三区性色av | 国产乱码精品一区二区三 | 精品国产精品三级精品av网址 | 国产在线小视频 | 日韩精品在线播放 | 午夜精品一区二区三区在线观看 | 都市激情综合 | 久久国产精品久久 | 欧美日韩在线免费观看 | 色欧美亚洲 |