加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

在ASP.NET 2.0中操作数据之七十四:用Managed Code创建存储过程

发布时间:2016-11-22 07:06:45 所属栏目:MsSql教程 来源:网络整理
导读:第八步:从表现层调用Managed Stored Procedures 当对数据访问层和业务逻辑层进行扩充以支持调用GetDiscontinuedProducts 和 GetProductsWithPriceLessThan这2种managed stored procedures后,我们可以在一个ASP.NET页面里展示这些存储过程的结果了. 打开A

  由于我们的解决资源管理器里包含2个工程——ManagedDatabaseConstructs SQL Server Project以及我们的website.为了从SQL Server Project进行调试,当调试时我们需要引导Visual Studio开启ManagedDatabaseConstructs SQL Server Project.在解决资源管理器里的ManagedDatabaseConstructs project上点击右键,选“Set as StartUp Project”项.

  当从调试器打开ManagedDatabaseConstructs project时,它执行Test.sql文件的SQL statements,该文件位于Test Scripts文件夹.比如,要测试GetProductsWithPriceLessThan存储过程的话,将Test.sql文件的内容替换为下面的statement,这些statement调用GetProductsWithPriceLessThan存储过程,其输入参数@CategoryID的值为14.95:

exec GetProductsWithPriceLessThan 14.95

  一旦将上面的脚本键入Test.sql文件,点Debug菜单里的“Start Debugging”项,或按F5或是工具栏上的绿色图标启动调试.这将在资源管理器里构建工程,将该managed database objects配置给Northwind数据库,然后执行Test.sql脚本.此时,将会遇到断点,我们可以进入GetProductsWithPriceLessThan方法,检查输入参数的值等等.

/uploads/allimg/c161121/14OI960423U0-955R.png
图28:碰到GetProductsWithPriceLessThan方法里的断点

  为了从客户端程序调试一个SQL database object,数据库务必要配置为支持应用程序调试.在服务器资源管理器里,在数据库上右键单击,确保选中“Application Debugging”项。另外,我们还要将ASP.NET应用程序与SQL Debugger结合起来,而且关闭连接池.这些步骤我们在第74章的第2步里详细探讨过了.

  一旦你配置完ASP.NET应用程序和数据库.设置ASP.NET website为启动方案.如果你登录一个调用设置了断点的managed objects的页面的话,该程序就会碰到断点,并转换到调试器,在调试器里你可以进入代码,就像图28那样.

第13步:手动编译并配置Managed Database Objects

  使用SQL Server Projects,我们可以很容易的创建、编译、配置managed database objects.不过遗憾的是,只有在Visual Studio的Professional 和 Team Systems这2个版本才可以使用SQL Server Projects.如果你使用的是Visual Web Developer 或 Standard Edition版本,并且打算使用managed database objects的话,你需要手动创建并配置它们.这将包括4个步骤:

1.创建一个文件来存放managed database object的源代码

2.将object进行编译

3.将编译文件注册到SQL Server 2005数据库

4.在SQL Server里创建一个数据库对象,并指向编译文件里的相应的方法

  为便于演示,我们将创建一个新的managed stored procedure,返回那些UnitPrice值高于指定值的产品.在你的电脑上创建一个名为GetProductsWithPriceGreaterThan.cs 的新文件,并键入如下的代码(你可以使用Visual Studio, Notepad或任何的文本编辑器来进行):

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);
 }
}

  这些代码与我们在第五步创建的GetProductsWithPriceLessThan方法的代码很相似.唯一的不同在于:方法名不同、WHERE字句不同、以及查询使用的参数名不同.返回到GetProductsWithPriceLessThan方法,其WHERE字句为“WHERE UnitPrice < @MaxPrice”. 而在这里,GetProductsWithPriceGreaterThan方法里,代码为“WHERE UnitPrice > @MinPrice”.

  我们现在需要将该类进行编译.在命令行里导航到你存放GetProductsWithPriceGreaterThan.cs文件的根目录,并使用C#编译器(csc.exe)来进行编译:

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

  如果包含csc.exe的文件夹没有位于系统路径,那你将必须完全引用其路径,%WINDOWS%/Microsoft.NET/Framework/version/,比如:

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

/uploads/allimg/c161121/14OI96044160-10H16.png
图29:对GetProductsWithPriceGreaterThan.cs文件进行编译

  其中,/t标记指定将C# class类编译为一个DLL(而不是可执行文件)。而 /out标记指定了编译后文件的名称.

  注意:除了用命令行来编译GetProductsWithPriceGreaterThan.cs class类外,我们还可以使用Visual C# Express Edition或在Visual Studio Standard Edition版里创建一个单独的Class Library project.S?ren Jacob Lauritsen为我们提供了一个Visual C# Express Edition project,它包含了GetProductsWithPriceGreaterThan存储过程,以及我们在第3、5和10步里创建的那2个managed stored procedures 和 UDF.此外还包含了添加相应数据库对象必需的T-SQL commands.

  将代码编译完后,我们需要将其注册到SQL Server 2005数据库.可以通过T-SQL,使用命令CREATE ASSEMBLY,或通过SQL Server Management Studio. 我们来看使用Management Studio的情况.

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读