SQL Server 2005中的CLR集成(2)
作者:静水流深 来源:IT168 发布时间:2009-03-10 15:07:00
4.1 创建复杂CLR存储过程
在这个示例中,将创建从AdventureWorks数据库的Production.Product表返回数据的存储过程。首先,选择“文件”→“新建项目”,然后在弹出窗口的左边导航菜单中选择“Visual C#”→“数据库”,接着将项目模板选择为“SQL Server项目”,这样可在Visual Studio 2005中创建新项目SqlServerDataAccess。如果单击新建项目对话框中的OK按钮,那么会要求添加数据库引用。如果AdventureWorks引用还不可用,那么可使用“添加新引用”选项来添加指向AdventureWorks数据库的引用。
当选择启用CLR存储过程调试和项目建立后,在菜单中选择“项目”→“添加存储过程”项,接着设置类名称为GetProducts.cs。一旦创建了类,可根据示例1修改代码。
示例1:由CLR存储过程返回表格式结果集
以下为引用的内容:
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 GetProducts(int categoryID)
{
SqlConnection connection = new SqlConnection("context connection = True");
connection.Open();
SqlCommand command = new SqlCommand("SELECT ProductID, Name FROM " +
"Production.Product WHERE ProductSubcategoryID = " +
categoryID.ToString(), connection);
SqlDataReader reader = command.ExecuteReader();
SqlContext.Pipe.Send(reader);
}
};
这个程序集中的代码创建了数据库连接,然后执行T-SQL语句,结果返回Product表中具有所提供类别ID的ProductID和Name列的所有记录。注意,示例1所示的上下文连接允许在调用CLR代码的同一上下文中执行SQL语句。为了启用上下文连接,可将连接字符串设置为“context connection=True”。
为了使用在SQL Server中处理的数据,内部过程的提供程序进行了优化。使用内部过程受管的提供程序的类和方法,能够很简单的将查询提交给数据库,执行DML和DDL语句,以及将结果集和消息返回给客户端应用程序。
Microsoft.SqlServer.Server命名空间对组成内部过程提供程序的类型进行分组。这个命名空间与ADO.NET的SqlClient命名空间共享很多相似性和接口,开发人员使用SqlClient命名空间从受管客户端和中间层应用程序访问SQL Server数据。由于具有相似性,所以能够很简单的将代码从客户端应用程序迁移到服务器和后台使用。
Microsoft.SqlServer.Server命名空间中有两个重要类,它们用于设置内部过程提供程序:
SqlContext:这个类封装了其他一些扩展。另外,该类提供了事务和数据库连接,它们是例程执行环境的一部分。
SqlPipe:这个类可使例程向客户端发送表格式结果和消息。这个类在概念上与ASP.NET中的Response类很相似,Response类也能用于向调用者发送消息。
既然已经创建了存储过程,那么就可以使用“生成”→“生成SqlServerDataAccess”菜单项生成项目。一旦项目生成,下一步是将存储过程部署到SQL Server。与前一示例不同,前一示例必须通过很多步骤才能部署存储过程,而Visual Studio 2005只要单击按钮就能够部署存储过程。为此,可选择“生成”→“部署SqlServerDataAccess”菜单项。以上就是使用Visual Studio 2005部署CLR存储过程的全部过程。
此时,可以通过执行来测试这个存储过程。为了达成本示例目的,创建一个测试该存储过程的简单ASP.NET页面,如示例2所示。


猜你喜欢
- 本文列出了HTML4标签的默认样式列表,对网页设计者来说这个应该很有用。原文来自:W3C (http://www.w3.org/TR/CSS
- 许多 Microsoft 的编程语言,如 Visual Basic、VBScript 和 Jscript,都提供集合(collection)
- 关于asp随机数的相关文章:asp生成一个不重复的随机数字 8个asp生成随机字符的函数 <html> <me
- Flask-WTF扩展可以把处理web表单的过程变成一种愉悦的体验。一、跨站请求伪造保护默认情况下,Flask-WTF能够保护所有表单免受跨
- 目标能够使用mybatis的标签实现动态SQL拼接分析我们在前边的学习过程中,使用的SQL语句都非常简单。而在实际业务开发中,我们的SQL语
- 准备工作:首先,我们需要 import 几个工具包,一个是 python 标准库中的 wave 模块,用于音频处理操作,另外两个是 nump
- 前些天用python处理xml的转换的一个小程序,用来把xml,xsl转换成html。用的libxml2,所以还要先安装了libxml2模块
- 可变长参数GO语言允许一个函数把任意数量的值作为参数,GO语言内置了**...操作符,在函数的最后一个形参才能使用...**操作符,使用它必
- 前面写过一篇关于python多线程的实现的文章, 但是效果不是最佳的,写法也不是很好。通过网上学习,也了解到了semaphore这个东西。百
- 本文实例讲述了security.js实现的RSA加密功能。分享给大家供大家参考,具体如下:在项目中遇到要对用户输入的密码进行RSA加密的需求
- mybatis数据库排序今天用到了对数据库按照倒序进行输出。因为刚接触mybatis,所以对这方面还不是太了解,再网上搜了好长时间终于找到了
- 画一个地球想画一个转动的地球,那么首先要有一个球,或者说要有一个球面,用参数方程可以表示为x=rcosϕcosθy=rc
- 视频观看视频敌人精灵这是我们“Shmup”项目的第2部分!在本课中,我们将添加一些敌人的精灵供玩家躲
- 特别是linux系统,装了多个python,有时候找不到python的绝对路径,有时候装了个django,又找不到django安装到哪里了。
- 一、安装pip install pymysql二、连接数据库三种连接数据库的方式import pymysql# 方式一conn = pymy
- --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2'
- 目录前言什么是socket?如何在 Python 中创建 socket 对象?Python 的套接字库中有多少种可用的套接字方法?服务器套接
- django路由和视图要了解django是如何运行的,首先要了解路由和视图两个概念,然后我们在项目中添加一些简单的路由和视图路由和视图的概念
- 从今天起,我将陆续将 ppk on JavaScript 的读书心得发布到这个blog上。ppk是我所景仰的一位web开发者,原因无它,只是
- 在使用python函数print()时,如下代码会出现输出无法显示的问题:分三次在一行输出 123print(1, end="&q