在ASP.NET 2.0中操作数据之七十三:用Managed Code创建存储过程
注意:管理数据库对象最适合做这种存储过程和用户定义函数——使用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点击工具栏上的执行图标以运行上述查询.
更新后重新部署该SQL Server Project,这次应该不会出错了.返回SQL Server Management Studio,在Object Explorer里的Northwind 数据库上右键单击,选“刷新”.接下来,找到Programmability文件夹,再展开Assemblies文件夹。如图10所示,Northwind数据库现在包含了一个由ManagedDatabaseConstructs工程生成的编译文件.
也来打开Stored Procedures文件夹。你将会看到名为GetDiscontinuedProducts的存储过程。该存储过程是在部署的时候创建的,它指向ManagedDatabaseConstructs编译文件里的GetDiscontinuedProducts方法.当执行GetDiscontinuedProducts存储过程时,它反过来执行GetDiscontinuedProducts方法.由于它是一个管理存储过程(managed stored procedure),不能通过Management Studio来对其进行编辑(因此,在存储过程名旁边有一个锁的图标)
还有一个障碍要克服:该数据库被配置为阻止执行managed code.我们来做一个实验。打开一个new query窗口,执行GetDiscontinuedProducts存储过程.你将会收到如下的错误信息:“Execution of user code in the .NET Framework is disabled. Enable ‘clr enabled'configuration option.” 让我们检查Northwind数据库的配置信息,在查询窗口键入并运行命令“exec sp_configure”。其显示“clr enabled”目前设置为0.
我们注意到每条配置(如图12)都有4个值:“minimum”、“maximum”、“config”、“run” 值.要更新“clr enabled”配置的“config”值,执行如下的命令:exec sp_configure 'clr enabled', 1 如果你再运行“exec sp_configure”的话,你将看到上述声明将“clr enabled”配置的“config”值设为1,而“run”值仍然为0.因此,我们需要执行RECONFIGURE命令,它将会把“ run”值设为目前的“config”值.在查询窗口输入“RECONFIGURE”,再点工具栏上的执行图标.如果你运行“exec sp_configure”的话,现在你可以看到“clr enabled”配置的“config” 和 “run”值都为1. 完成“clr enabled”配置后,我们准备运行GetDiscontinuedProducts存储过程.在查询窗口键入并运行命令“exec GetDiscontinuedProducts”.调用该存储过程将导致执行GetDiscontinuedProducts方法里相应的managed code.代码发出一个SELECT查询并返回所有处于discontinued状况的产品,并将数据返回给调用程序——具体到本例,就是SQL Server Management Studio.Management Studio将接收到的数据展示在Results窗口.
第五步:创建接收输入参数的Managed Stored Procedures 我们在本教程创建的很多查询和存储过程都使用参数.比如,在第67章,我们创建了一个名为GetProductsByCategoryID的存储过程,它接收一个名为@CategoryID的输入参数.该存储过程返回那些其CategoryID值与@CategoryID吻合的产品. 要创建接收输入参数的managed stored procedure,仅仅在定义方法时指定这些参数即可.我们来做个演示,在ManagedDatabaseConstructs工程里添加一个名为GetProductsWithPriceLessThan的另一个managed stored procedure.该managed stored procedure接收一个指定了价格的参数,返回所有的其UnitPrice列低于参数值的产品. 我们来进行添加.在ManagedDatabaseConstructs工程名上右键单击,选“添加新存储过程”.将文件命名为GetProductsWithPriceLessThan.cs.就像我们在图3看到的那样,这将创建一个新的C# class类文件. (编辑:源码网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |