C#编写扩展存储过程,实际上是利用C#写个dll,注册之后在sql中调用而已。理论性的东西本人过于薄弱,讲不出什么道道,还是先来看一个简单的示例吧:
1、首先,建一个类库项目,新建类文件CsharpHelper.cs.包含代码如下:
注意记得把自动生成的那个类库信息文件删掉。
至此dll的准备工作完成了,下面在sql里试试看,打开查询分析器(用sa或具有相应权限的账户登录),选中master数据库,书写sql语句如下:
看看,是不是输出了"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,代码如下:
dt;
}
}
}
}
2、再按照之前说的那几个步骤,生成snk文件,编译,注册。在查询分析器里调用:
省略了部分代码
执行之后发现什么?oh my god,是不是出错了?提示“该环境不支持。。。”?没关系,仔细想想,GetData方法返回的是datatable,sql里认不认得这个东西啊?对了,问题就出在这,把datatable转成字符串数组吧!再添加一个方法:
dataArr;
}把GetData里的return语句修改一下:return FormatDataTable(dt); 重新生成并注册,在sql里调用下看看。是不是成功了?可是。。。好像还有点不对,怎么行列似乎被对调了啊?哈哈,再修改下FormatDataTable方法:
dataArr;
}再编译,注册,调用,这回没问题了。Over