加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2016-11-23 14:35:15 所属栏目:MsSql教程 来源:站长网
导读:导言: 数据库,比如Microsoft's SQL Server 2005使用Transact-Structured Query Language (T-SQL)来插入、修改、检索数据.绝大多数数据库系统都包含constructs来对一系列的SQL statements进行分组,这些statements可以作为单独的单元来执行.存储过程就是

  注意:管理数据库对象最适合做这种存储过程和用户定义函数——使用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/c161121/14OI95P4EF-1bSc.png
图9:更新Northwind数据库的Compatibility Level

  更新后重新部署该SQL Server Project,这次应该不会出错了.返回SQL Server Management Studio,在Object Explorer里的Northwind 数据库上右键单击,选“刷新”.接下来,找到Programmability文件夹,再展开Assemblies文件夹。如图10所示,Northwind数据库现在包含了一个由ManagedDatabaseConstructs工程生成的编译文件.

/uploads/allimg/c161121/14OI95PJV0-1c2405.png
图10:该ManagedDatabaseConstructs编译文件现在注册到Northwind数据库

  也来打开Stored Procedures文件夹。你将会看到名为GetDiscontinuedProducts的存储过程。该存储过程是在部署的时候创建的,它指向ManagedDatabaseConstructs编译文件里的GetDiscontinuedProducts方法.当执行GetDiscontinuedProducts存储过程时,它反过来执行GetDiscontinuedProducts方法.由于它是一个管理存储过程(managed stored procedure),不能通过Management Studio来对其进行编辑(因此,在存储过程名旁边有一个锁的图标)

/uploads/allimg/c161121/14OI95P931Z-200B53.png
图11:GetDiscontinuedProducts存储过程展示在Stored Procedures文件夹

  还有一个障碍要克服:该数据库被配置为阻止执行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.

/uploads/allimg/c161121/14OI95Q1240-2012063.png
图12:“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窗口.

/uploads/allimg/c161121/14OI95Q41H0-2029539.png
图13:GetDiscontinuedProducts存储过程返回所有处于Discontinued状态的产品

第五步:创建接收输入参数的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类文件.

(编辑:济南站长网)

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

热点阅读