用C#编写SQLServer自定义函数

原文:http://blog.sina.com.cn/s/blog_5d1f29c10100b04n.html

        这里我们用C#做一个计算滑轮系统近似距离的函数,并把该函数部署到SqlServer2005上去,这里使用的方法是原始的,全手动方式的部署方式,主要的目的是为了理解部署原理,实际上直接开SqlServer数据库项目可能更容易些。
   首先让我们看一下滑轮传输带系统图示,如下图所示:

    用C#编写SQLServer自定义函数
一、首先在VS2005里编写一个计算传输带距离的函数,源代码如下所示:
//自定义计算传输带距离的函数
using System;
using System.Collections.Generic;
using System.Text;

namespace SqlServerClr
{
      public class pulley
      {
              public static double PulleyDistance(double Pulley1Diameter, double Pulley2Diameter, double BeltLength)
              {
                      double length = 0, a = 2.0;
                      double b = BeltLength - 1.57 * (Pulley1Diameter + Pulley2Diameter);
                      double c = System.Math.Pow(Pulley1Diameter - Pulley2Diameter, 2.0);
                      //如果只是
                      double b1 = (b * b) - (4 * a * c);
                      if (b1 > 0)
                      {
                              length = (b + Math.Sqrt(b1)) / (2 * a);
                              //检查传输带是否合适
                              if (length < ((Pulley1Diameter + Pulley2Diameter) / 2))
                              {
                                      //返回0,如果传输带不合适;
                                      length = 0;
                              }
                      }

                      //精度只允许一位小数
                      return System.Math.Round(length, 1);
              }

      }
}

把以上CS文件编译为动态连接库, 在Visual Studio 2005 命令行模式下使用命令:
csc /t:library /out:pulleylib.dll pulley.cs
编译成功,得到了一个pulleylib.dll

二、在SQL Sever 2005中部署CS的自定义函数
--编译PulleyDistance函数
Drop Assembly Mechanics --如果编译程序出错可以用此命令删除程序集

Create Assembly Mechanics --Mechanics是编译程序集名称
from 'E:\pulleyLib.dll'
Go

Create function PulleyDistance
(
@diameter1 float,
@diameter2 float,
@beltLength float
  )
  --注意这里的三个参数名称可以和CS编写的静态函数不同,但类型要兼容一致
returns float
As External name
[Mechanics].[SqlServerClr.pulley].[PulleyDistance]
  --CS中定义的静态函数全称一般为【命名空间.类名】.【函数名】,注意这里是区分大小写的,对应 [SqlServerClr.pulley].[PulleyDistance]
GO

--检查是否已经部署上了
select dbo.PulleyDistance(3,2,100)

  --检查部署结果
select routine_name,routine_body from information_schema.routines

通过以上两步,一个.NetCLR的函数就部署到了SqlServer上了,^__^
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值