zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    linux命令(14):ifup/ifdown/ip addr命令
    linux命令(13):kill/killall命令
    linux命令(12):ping命令
    linux命令(11):df命令
    linux命令(9):route命令
    npm安装node-sass报msbuild相关错误的解决办法
    'vue-cli-service' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    redis发布与订阅的实现
    设计模式-工厂模式
    设计模式的介绍
  • 原文地址:https://www.cnblogs.com/sdlfx/p/1293482.html
Copyright © 2011-2022 走看看