• C#编写扩展存储过程


    C#编写扩展存储过程,实际上是利用C#写个dll,注册之后在sql中调用而已。理论性的东西本人过于薄弱,讲不出什么道道,还是先来看一个简单的示例吧:

    1、首先,建一个类库项目,新建类文件CsharpHelper.cs.包含代码如下:

    Code

     
    注意记得把自动生成的那个类库信息文件删掉。

    2、使用VS里的命令提示,生成强命名文件:sn -k HelperKey.snk
    3、编译这个类文件,记得把snk加上去:csc /t:library /keyfile:HelperKey.snk CsharpHelper.cs
    4、注册dll:regasm /tlb:CsharpHelper.tlb CsharpHelper.dll /codebase
     

    至此dll的准备工作完成了,下面在sql里试试看,打开查询分析器(用sa或具有相应权限的账户登录),选中master数据库,书写sql语句如下:

    Code

     
    看看,是不是输出了"Hello from Csharp"呢?

    可能遇到的错误:

    a、提示“阻止了对组件 'Ole Automation Procedures' 的 过程'sys.sp_OACreate' 的访问”,此时可用"exec sp_configure 'Ole Automation Procedures', 1 reconfigure"语句来开启权限,或是在SQLServer功能的外围应用配置器中选中“Ole自动化”。

    b、返回0x80131700号错误信息。这个我也没解决。目前只发现在装有sql2000的机器上没碰到此问题。

    c、其它错误,请参照sqlserver联机丛书。

    或许你会说,仅仅返回一个字符串,有啥用啊?返回个数据集给我看看?没问题,let's go!

     1、再新建一个文件,名为DataHelper.cs,代码如下:

    DataHelper Code

     2、再按照之前说的那几个步骤,生成snk文件,编译,注册。在查询分析器里调用:

    DataHelper Sql Code

     执行之后发现什么?oh my god,是不是出错了?提示“该环境不支持。。。”?没关系,仔细想想,GetData方法返回的是datatable,sql里认不认得这个东西啊?对了,问题就出在这,把datatable转成字符串数组吧!再添加一个方法:

    Format1 Code

    把GetData里的return语句修改一下:return FormatDataTable(dt); 重新生成并注册,在sql里调用下看看。是不是成功了?可是。。。好像还有点不对,怎么行列似乎被对调了啊?哈哈,再修改下FormatDataTable方法:

    Format2 Code

     再编译,注册,调用,这回没问题了。Over

  • 相关阅读:
    lsb_release -a 查询Linux系统版本
    html常用标签
    js判断对象是否为空
    springBoot2.x 支持跨域请求配置
    httpclient 上传附件实例
    js 使用sessionStorage总结与实例
    性能测试需求调研分析方法
    jmeter压测实践
    页面加载时调用js函数方法
    IntelliJ IDEA 界面介绍及常用配置
  • 原文地址:https://www.cnblogs.com/sdlfx/p/1293482.html
Copyright © 2020-2023  润新知