创建基于SQL2005的CLR存储过程_SQL SERVER数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

创建基于SQL2005的CLR存储过程

作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0

本篇关键词:存储过程基于创建
黑客防线网安网讯:   在 SQL Server 2005 中,可以在 SQL Server 实例中使用以下方法创建数据库对象:基于 Microsoft .NET Framework 公共语言运行时 (CLR) 创建中的程序集使用编程方法创建。能够利用由CLR提...

   在 SQL Server 2005 中可以在 SQL Server 实例中使用以下方法创建数据库对象:基于 Microsoft .NET Framework 公共语言运行时 (CLR) 创建中的程序集使用编程方法创建能够利用由CLR提供的众多编程模型的数据库对象包括触发器、存储过程、函数、聚合函数和类型
  虽然Transact-SQL是专门为数据库中的直接数据访问和操作而设计但是它没有提供编程构造来使数据操作和计算更加容易。例如,Transact-SQL 不支持数组、集合、for-each 循环、位转移或类。

  CLR存储过程提供面向对象的功能,例如封装、继承和多态性。现在,相关代码可以很容易在类和命名空间中进行组织。在使用大量服务器代码时,这样可以更容易地组织和维护代码,通过使用托管代码而实现某些数据库功能。

  对于计算和复杂的执行逻辑,基于CLR的托管代码比Transact-SQL 更适合,托管代码的一个优点是类型安全性,它全面支持许多复杂的任务,包括字符串处理和正则表达式。通过 .NET Framework 库中提供的功能,可以访问数千个预生成的类和例程。可以很容易从任何存储过程、触发器或用户定义函数进行访问。基类库包括的类提供用于字符串操作、高级数学运算、文件访问、加密等的功能。

  对于几乎或根本不需要过程逻辑的数据访问,还是使用 Transact-SQL。对于具有复杂逻辑的CPU密集型函数和过程最好还是使用托管代码。

  我们看如何在Visual Studio 2005中创建基于SQL Server 2005的CLR存储过程:

  我们打开Visual Studio 2005,在对应数据库栏目下面有个SQL Server项目,新建立一个项目,命名为StoredStu,确定过后会显示一个数据库连接对话框,数据库连接好后,我们在数据库中有如下两个表,如下:

  StuInfo(学生信息表)

StuID 

 学生 ID 

 
StudentName 

 学生姓名 

 
StudentNO 

 学生学号 

 
StudentUniversity 

 所在学院 

 
NationCode 

 民族代码 

 

  Nation(民族表)

NationCode 

 民族代码 

 
NationName 

 民族名称
 

  新建立一个文件,选择“存储过程”的选项,命名为StoredStu,在文件中写入以下的代码:
  
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 StoredStu()
    {
        // 在此处放置代码
        SqlPipe sp = SqlContext.Pipe;
        string sql = "Select * from StuInfo";
        using (SqlConnection conn = new SqlConnection("context connection=true"))
        {
            conn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;
            cmd.Connection = conn;
            cmd.CommandText = sql;
            SqlDataReader rdr = cmd.ExecuteReader();
            sp.Send(rdr);
        }

    }

    [SqlProcedure]
    public static void GetStuInfo(string strNationCode)
    {
        string sql = "select Stu.StudentName, Stu.StudentNo, Stu.StudentUniversity,Na.NationName from StuInfo Stu inner join Nation Na on Stu.NationCode = Na.NationCode  where Stu.NationCode = '" + @strNationCode + "'";
        using (SqlConnection conn = new SqlConnection("context connection=true"))
        {
            conn.Open();
            SqlPipe sp = SqlContext.Pipe;
            SqlCommand cmd = new SqlCommand();
            cmd.CommandType = CommandType.Text;
            cmd.Connection = conn;
            cmd.CommandText = sql;
            SqlParameter paramstrNationCode = new SqlParameter("@strNationCode", SqlDbType.VarChar, 11);
            paramstrNationCode.Direction = ParameterDirection.Input;
            paramstrNationCode.Value = strNationCode;
            cmd.Parameters.Add(paramstrNationCode);
            SqlDataReader rdr = cmd.ExecuteReader();
            sp.Send(rdr);
        }
    }

};

  现在我们先对其进行编译,在“生成”菜单中选择“生成解决方案”,当编译完工程后,就需要为其进行部署了。同样选择“生成”菜单中的“部署解决方案”, 这样就会自动将写好的存储过程部署到 SQL Server 2005 中去。

  为了确保SQL可以执行托管代码,我们还需要在SQL Server 2005中,执行下面的语句:


  EXEC sp_configure "clr enabled", 1;
  RECONFIGURE WITH OVERRIDE;
  GO


  执行显示的结果如下:

  “配置选项'clr enabled' 已从0 更改为1。请运行RECONFIGURE 语句进行安装。”

  这样就可以创建好CLR存储过程了。

 

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-11078-1.html
网站维护教程更新时间:2012-03-21 03:15:00  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer