加载中…
个人资料
小瓶子
小瓶子
  • 博客等级:
  • 博客积分:0
  • 博客访问:99,004
  • 关注人气:13
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

Sql Server的CLR集成

(2012-11-28 15:55:46)
标签:

clr

存储过程

it

分类: ASP.NET
    在SqlServer 2005中,加入了很多新特性, 最值得一提的是对XML的支持以及完全支持.NET通用语言运行时(CLR)了, 也就是说你可以使用.NET的语言,如C#、VB.NET之类的来开发SQL Server的存储过程、函数和触发器。到底什么是CLR集成?先看看MSDN的解释吧 --- 通过在 Microsoft SQL Server 中托管 CLR(称为 CLR 集成),可以在托管代码中编写存储过程、触发器、用户定义函数、用户定义类型和用户定义聚合函数。 因为托管代码在执行之前会编译为本机代码,所以,在有些方案中可以大大提高性能。通俗点讲,就是sqlserver 2005 版本之后,数据库引擎中加入了 .NET Framework 的公共语言运行时 (CLR) 组件,可以更方便和.NET应用程序交互。

   一 启用CLR集成
    在你开始用C#写存储过程之前,必须要启用你的SQL Server的CLR集成特性。 默认情况它是不启用的。 打开你的SQL Server Management Studio并执行如下脚本。

  sp_configure 'clr enabled'1 
Sql <wbr>Server的CLR集成
GO 
Sql <wbr>Server的CLR集成
RECONFIGURE 
Sql <wbr>Server的CLR集成
GO 

   执行显示的结果如下:“配置选项'clr enabled' 已从0 更改为1。请运行RECONFIGURE 语句进行安装。”
  这样就可以创建好CLR存储过程了。
   如果要停用CLR集成的话也是执行这个存储过程,只不过第二个参数要变为“0”而已。另外,为了使新的设置产生效果,不要忘记调用“RECONFIGURE”。
 
   二 新建一个sqlserver CLR 数据库项目
      简单示例创建存储过程,写法以及调用方法。
      2.1 添加新项:
      Sql <wbr>Server的CLR集成

1. 没有返回值的存储过程
   [SqlProcedure]
Sql <wbr>Server的CLR集成public static void ChangeCompanyName(SqlString CustomerID, SqlString CompanyName)
  {
      SqlConnection cnn new SqlConnection("context connection=true");
      cnn.Open();
      SqlCommand cmd new SqlCommand();
      cmd.Connection cnn;
      cmd.CommandText @"update customers set 
                                       companyname=@p1 where customerid=@p2";
      SqlParameter p1 new SqlParameter("@p1", CompanyName);
      SqlParameter p2 new SqlParameter("@p2", CustomerID);
      cmd.Parameters.Add(p1);
      cmd.Parameters.Add(p2);
      int i=cmd.ExecuteNonQuery();
      cnn.Close();
      SqlContext.Pipe.Send(i.ToString());
  }
2. 返回从表中读取的一条或多条记录的存储过程
 [Microsoft.SqlServer.Server.SqlProcedure]
Sql <wbr>Server的CLR集成public static void GetAllCustomers()
 {
      SqlConnection cnn new SqlConnection("context connection=true");
      cnn.Open();
      SqlCommand cmd new SqlCommand();
      cmd.Connection cnn;
      cmd.CommandText "select from customers";
      SqlDataReader reader cmd.ExecuteReader();
      SqlContext.Pipe.Send(reader);
      reader.Close();
      cnn.Close();
 }
有输出参数的存储过程
Sql <wbr>Server的CLR集成[SqlProcedure]
Sql <wbr>Server的CLR集成
public static void GetCompanyName(SqlString CustomerID, out SqlString CompanyName)
 {
     SqlConnection cnn new SqlConnection("context connection=true");
     cnn.Open();
     SqlCommand cmd new SqlCommand();
     cmd.Connection cnn;
     cmd.CommandText @"select companyname from 
                                        customers where customerid=@p1";
     SqlParameter p1 new SqlParameter("@p1", CustomerID);
     cmd.Parameters.Add(p1);
     object obj cmd.ExecuteScalar();
     cnn.Close();
     CompanyName obj.ToString();
   }
 
    2.2 方法调用
   SqlConnection connection = new SqlConnection(DataBase.DatabaseConnection)
    connection.Open();    
   SqlCommand cmdLiming = new SqlCommand("dbo.GetBreakOffByID", connection);
   cmdLiming.CommandType = CommandType.StoredProcedure;
   SqlParameter p1 = new SqlParameter("@breakOffID", guid);
   cmdLiming.Parameters.Add(p1);
   SqlDataReader reader = cmdLiming.ExecuteReader();
    if (reader.Read())
   {
   }
   三 部署
      具体步骤参考上一篇CLR存储过程的部署

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有