在ASP.NET 2.0中操作数据之七十三:用Managed Code创建(3)

  注意:就像在上一章探讨的一样,当从一个客户端程序——比如一个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.

https://img.jbzj.com/file_images/article/201605/2016052009143721.png


图8:添加一个新的存储过程,名为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对象,并将结果返回给客户端程序.

  注意:管理数据库对象最适合做这种存储过程和用户定义函数——使用procedural logic逻辑而不是set-based logic逻辑.所谓Procedural logic逻辑包括处理一系列一行行(on a row-by-row basis)的数据或者处理标量数据(scalar data).然而,我们刚刚创建的GetDiscontinuedProducts方法,并未使用Procedural logic逻辑。其实该方法最理想的是作为一个T-SQL存储过程来执行.之所以作为一个管理存储过程来执行,是为了示范创建和配置管理存储过程所必要的步骤.

步骤4:配置Managed Stored Procedure

  代码完成后我们准备将其配置给Northwind数据库.“Deploy”项执行的具体步骤我们将在第13步讲明白。进入解决资源管理器,在ManagedDatabaseConstructs工程名上右键单击,选“Deploy”项,然而,可能会出现如下的错误消息:“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.”

  该出错信息发生试图将编译文件注册到Northwind数据库时.为了将一个编译文件注册到一个SQL Server 2005数据库,该数据库的compatibility level必须设置为90.默认下,一个新的SQL Server 2005数据库的compatibility level为90.而Microsoft SQL Server 2000使用的数据库的默认compatibility level为80.由于使用的Northwind数据库最初是一个Microsoft SQL Server 2000数据库,其compatibility level被设置为80,因此需要设置为90以便于进行注册.要更新数据库的compatibility level,在Management Studio里打开一个New Query窗口,输入:exec sp_dbcmptlevel 'Northwind', 90点击工具栏上的执行图标以运行上述查询.

/uploads/allimg/200612/1H5509410_0.png


图9:更新Northwind数据库的Compatibility Level

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwywy.html