怎样从SQL Server 2005 CLR存储过程返回结果集
1个回答
展开全部
代码示例 下面的C#函数将获得某文件夹的文件列表并将这个列表作为一个结果集返回。这个函数的参数如下所示:
path——获取文件所在的文件夹;例如C:\TEMP。
pattern——通配符,如*.*(所有文件),*.dat,等等。
recursive——是否包含在子文件夹下的文件;1代表true,否则为0。
publicstaticvoidGetListOfFiles(
SqlStringpath,
SqlStringpattern,
SqlBooleanrecursive) { SqlPipepipe=SqlContext.Pipe;
SqlMetaData[]cols=newSqlMetaData[1];
cols[0]=newSqlMetaData(
"FILE_NAME",SqlDbType.NVarChar,1024);
SearchOptionsearchOption;
if(recursive==true)
searchOption=SearchOption.AllDirectories; else searchOption=SearchOption.TopDirectoryOnly;
stringdir=path.ToString();
if(Directory.Exists(dir)==false) { pipe.Send("Directorydoesnotexist");
return; } string[]files=Directory.GetFiles(
dir,pattern.ToString(),searchOption);
if(files.Length0) { SqlDataRecordrec=newSqlDataRecord(cols);
pipe.SendResultsStart(rec);
foreach(stringfileinfiles) { rec.SetSqlString(0,newSqlString(file));
pipe.SendResultsRow(rec); } pipe.SendResultsEnd(); } else { pipe.Send("Nofiles"); } } Directory是.NET框架中的一个类。它是用来检查这个路径是否存在并获得文件列表。在上面的代码中从CLR集成的观点来看,重点是:
SqlPipe对象是用来将结果发送给调用者的。SqlContext对象是自动可用的,并提供SqlPipe对象。
SqlMetaData类是用来指定结果集中的一个字段的。我们指定字段名称、类型和大小。我们在这个例子中只返回一个字段,但是你可以返回多个字段。
SqlDataRecord类是用来形成结果集中的一个单独记录的。它被初始化为SqlMetaData对象的数组(例如这些字段)。SetSqlString方法是被调用来基于序列号给每个字段分配值的(例如在SqlMetaData对象数组中的索引)。
SqlPipe的SendResultsRow方法通过SqlDataRecord对象发回一条记录给调用者。
SqlPipe的SendResultsEnd方法是用来表示结果集结束的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询