在ASP.NET 2.0中操作数据之七十三:用Managed Code创建存储过程
打开Visual Studio. 从 File 菜单,选New Project以打开New Project对话框(见图4).点到Database工程类型,在右边的Templates列表,选择创建一个新的SQL Server Project.我将其命名为ManagedDatabaseConstructs并放在一个名为Tutorial75的解决方案里.
在New Project对话框里点OK按钮,创建该解决方案和SQL Server Project. 一个SQL Server Project依赖于一个具体的数据库.因此,接下来我们要指定该信息。如图5所示,New Database Reference对话框里指向了Northwind数据库,也就是我们在第一步里注册的SQL Server 2005 Express版本数据库实例.
为了对我们将要在本工程创建的管理存储过程和用户自定义函数进行调试,我们需要激活SQL/CLR调试支持.无论什么时候将一个SQL Server Project与新的数据库联系起来时(就像我们在图5做的那样),Visual Studio会询问我们是否激活SQL/CLR调试(如图6),选Yes.
此时,这个新的SQL Server Project已经添加到解决方案里了。其包含一个Test Scripts文件夹,文件夹里是一个Test.sql文件。它用来对本工程添加的管理数据库对象进行调试,我们将在第12步考察调试. 我们现在可以对该工程添加新的管理存储过程和用户自定义函数.不过在此之前,我们要将现有的web应用程序包含进解决方案。在 File 菜单里选Add项,再选Existing Web Site.浏览到相应的文件夹,点OK.如图7所示,这将更新解决方案以包含2个工程:即website和名为ManagedDatabaseConstructs的SQL Server Project.
Web.config文件里的NORTHWNDConnectionString值当前引用的是App_Data文件夹里的NORTHWND.MDF。由于我们已经将其从App_Data文件夹移出了,其注册为SQL Server 2005 Express版本数据库实例,因此我们需要相应的更新NORTHWNDConnectionString值。打开Web.config文件,改动NORTHWNDConnectionString值,像这样:“Data Source=localhost/SQLExpress;Initial Catalog=Northwind;Integrated Security=True”. 完成后,你的Web.config文件的<connectionStrings>节点看起来和下面的差不多: <connectionStrings> <add name="NORTHWNDConnectionString" connectionString= "Data Source=localhost/SQLExpress;Initial Catalog=Northwind; Integrated Security=True;Pooling=false" providerName="System.Data.SqlClient" /> </connectionStrings> 注意:就像在上一章探讨的一样,当从一个客户端程序——比如一个ASP.NET website,调试一个SQL Server对象时,我们需要关闭连接池。上面的连接字符串里我们关闭了连接池(“Pooling=false”). 如果你不打算从ASP.NET website调试管理存储过程和用户自定义函数的话,激活连接池. 第三步:创建一个Managed Stored Procedure 要向Northwind数据库添加一个管理存储过程的话,我们首先要创建一个存储过程作为该SQL Server Project里的一个方法。从解决资源管理器里,右键单击 ManagedDatabaseConstructs工程,选“添加新项”,这将展示Add New Item 对话框,其列出了可以添加到该工程的各种管理数据库对象的类型,如图8所示,包括stored procedures 、User-Defined Functions等.我们来创建一个存储过程,用来简单的将那些处于discontinued状态的产品返回,将该存储过程文件命名为GetDiscontinuedProducts.cs.
这将创建一个新的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方法来执行,且位于一个名为StoredProcedures的部分类(partial class)文件之内. 此外,该 GetDiscontinuedProducts方法有一个SqlProcedure特性, 这就标明了该方法是一个存储过程. 下面的代码创建了一个SqlCommand对象,设其CommandText为一个SELECT查询,以返回Products table表里所有Discontinued列为1的记录.它然后执行该命令并将结果返回给客户端程序.添加这些代码到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); 所有的管理数据库对象都可以使用SqlContext对象,该对象展示“调用者”(caller)的内容;而SqlContext又可以通过其Pipe属性来访问一个SqlPipe对象,该对象用来在SQL Server数据库和调用程序之间传递信息;而ExecuteAndSend方法,就像其名字暗示的那样,执行传入的SqlCommand对象,并将结果返回给客户端程序. (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |