SQL SERVER拓展存储过程
一直都是C#调用数据库的对象,这里介绍的拓展存储过程可以在DB中调用C#的dll并且返回到DB一些信息(表或者字符串)
C#代码如下,主要用以返回一个路径下面的文件,用以测试
下面只是为了创建一个类库,从而产生一个dll,所以操作如下:

using Microsoft.SqlServer.Server; using System; using System.Collections; using System.Collections.Generic; using System.Data.SqlTypes; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; public partial class UserDefinedFunctions { [SqlFunction(FillRowMethodName = "FillRow")] public static IEnumerable DirectoryList(string sRootDir, string sWildCard, bool bIncludeSubDirs) { ArrayList aFileArray = new ArrayList(); DirectorySearch(sRootDir, sWildCard, bIncludeSubDirs, aFileArray); return aFileArray; } private static void DirectorySearch(string directory, string sWildCard, bool bIncludeSubDirs, ArrayList aFileArray) { GetFiles(directory, sWildCard, aFileArray); if (bIncludeSubDirs) { foreach (string d in Directory.GetDirectories(directory)) { DirectorySearch(d, sWildCard, bIncludeSubDirs, aFileArray); } } } private static void GetFiles(string d, string sWildCard, ArrayList aFileArray) { foreach (string f in Directory.GetFiles(d, sWildCard)) { FileInfo fi = new FileInfo(f); object[] column = new object[2]; column[0] = fi.FullName; column[1] = fi.LastWriteTime; aFileArray.Add(column); } } private static void FillRow(object obj, out string filename, out DateTime date) { object[] row = (object[])obj; filename = (string)row[0]; date = (DateTime)row[1]; } }
SQL server 代码
ALTER DATABASE InvestorRelations SET TRUSTWORTHY ON; USE InvestorRelations CREATE ASSEMBLY fExampleTVF FROM 'E:\学习\SessionTest\TestKZCCGC\bin\Debug\TestKZCCGC.dll' WITH PERMISSION_SET=EXTERNAL_ACCESS CREATE FUNCTION fTVFExample( @RootDir nvarchar(max), @WildCard nvarchar(max), @IncludeSubDirs bit ) RETURNS TABLE ( FileName nvarchar(max), LastWriteTime datetime ) AS EXTERNAL NAME fExampleTVF.UserDefinedFunctions.DirectoryList
操作之后你可以查看:
最后可以查询下:
SELECT FILENAME,LASTWRITETIME FROM dbo.fTVFExample('E:\学习','*.ppt',0)
当你查询的时候,有可能会有报错如下:
你可以使用如下代码:
exec sp_configure 'show advanced options', '1'; go reconfigure; go exec sp_configure 'clr enabled', '1' go reconfigure; exec sp_configure 'show advanced options', '1'; go
下面的文章介绍了更多的报错信息,可以参考下,我操作的时候没有遇到
https://www.cnblogs.com/lykbk/p/ewrewrwerwer3454454644.html
当然,这个在某些情况下也是有缺陷的,如果你需要禁用这部分功能,可以参考下面的文章:
https://www.cnblogs.com/chenmh/p/8257369.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」