论坛登陆 注册 教程 笑话 影视 投稿
首页 | 页界资讯 | 网络应用 | 软件应用 | 组网技术 | 网络原理 | 聊天通讯 | 网管知识 | 帮助
笑话 | 操作系统 | 注 册 表 | 编程开发 | 数 据 库 | 媒体动画 | 网页设计 | 图形图象 | 地图
论坛 | 网络安全 | 安全防范 | 服 务 器 | 硬件学堂 | 路由技术 | 搜索研究 | 站长经验 | 投稿
影院 | 教育频道 | 特色专题 | 精文荟萃 | 注 册 码 | 论坛社区 | 网站地图 | 广告服务 | 旧版
设为首页 加入收藏
当前位置:首页>>文章>>数据库>>Mssql>>正文

使用SQL Server 2005中的CLR 集成(2)

www.xker.com 作者: 来源:Microsoft 加入日期:2006-3-7 9:13:42

【问题提问、论坛交流】(上接:使用SQL Server 2005中的CLR 集成(1))下面的问题是托管存储过程如何将结果返回给它的调用者而不是通过 SqlDataReader 来使用它这可以通过称为 SqlPipe 的新类来实现通过 SqlContext 类的静态方法可以使此类的实例对托管存储过程可用SqlPipe 有几种方法可以将结果返回给存储过程的调用者这两个类都是在 Sqlaccess.dll 中定义的

SqlPipe

在 SqlPipe 类中可以使用的方法中,最容易理解的就是 Execute 方法,它将命令对象作为参数接受这个方法主要执行命令,并且没有使执行的结果可用于托管框架,而是将结果发送给存储过程的调用者发送结果的这种形式在语义上与将语句嵌入 T-SQL 存储过程内是一样的在本文前面描述的性能方面,SqlPipe.Execute 与 T-SQL 是等价的

create proc proc1 as
   select col1 from dbo.table1;
The equivalent in C# would be:
public static void proc1()
{
   System.Data.SqlServer.SqlCommand cmd=SqlContext.GetCommand();
   cmd.CommandText= "select col1 from dbo.table1";
   SqlContext.GetPipe().Execute(cmd);
}

对于返回的数据是由执行的查询直接产生的情况,SqlPipe.Execute 可以很好地工作然而,在某些情况下可能希望1)从数据库中获得结果,进行操作或者转换,然后发送它们,或者 2)将结果发送回原地而不是本地 SQL Server 实例

SqlPipe 提供了一组可以协同工作以使应用程序可以将任何结果返回给调用者的方法:SendResultsStart、SendResultsRow 和 SendResultsEnd在很大程度上,这些 API 类似于对扩展存储过程的开发人员可用的 srv_describe 和 srv_sendrow API

SendResultsStart 将 SqlDataRecord 作为参数接受,并且指示返回的新结果集的开头该 API 从记录对象读取元数据信息,并且将其发送给调用者该方法有重载,以允许发送元数据以及记录中的实际值

随后可以返回行,方法是对要发送的每行调用一次 SendResultsRowows在发送完全部所需的行之后,需要调用 SendResultsEnd 来指示结果集的结尾

例如,下面的 C# 代码片段表示一个存储过程,它读取 XML 文档(来自 MSDN 的 Really Simple Syndication [RSS] 供给),使用 System.Xml 类进行解析,并且以相关的形式返回信息请注意,这些代码应该创建为 EXTERNAL_ACCESS(或 UNSAFE)程序集,因为访问 Internet 所需的代码访问安全 (CAS) 权限只有在这些权限集中才是可用的

// Retrieve the RSS feed
XPathDocument doc = new XPathDocument("http://msdn.microsoft.com/sql/rss.xml");
XPathNavigator nav = doc.CreateNavigator();
XPathNodeIterator i = nav.Select("//item");

// create metadata for four columns
// three of them are string types and one of the is a datetime
SqlMetaData[] rss_results = new SqlMetaData[4];
rss_results[0] = new SqlMetaData("Title", SqlDbType.NVarChar, 250);
rss_results[1] = new SqlMetaData("Publication Date", SqlDbType.DateTime);
rss_results[2] = new SqlMetaData("Description", SqlDbType.NVarChar, 2000);
rss_results[3] = new SqlMetaData("Link", SqlDbType.NVarChar, 1000);

// construct the record which holds metadata and data buffers
SqlDataRecord record = new SqlDataRecord(rss_results);

// cache a SqlPipe instance to avoid repeated calls to SqlContext.GetPipe()
SqlPipe sqlpipe = SqlContext.GetPipe();

// send the metadata, do not send the values in the data record
sqlpipe.SendResultsStart(record, false);

// for each xml node returned, extract four pieces 
// of information and send back each item as a row
while (i.MoveNext())
{
   record.SetString(0, (string)
                       i.Current.Evaluate("string(title[1]/text())"));
   record.SetDateTime(1, DateTime.Parse((string) 
                       i.Current.Evaluate("string(pubDate[1]/text())")));
   record.SetString(2, (string)
                       i.Current.Evaluate("string(description[1]/text())"));
   record.SetString(3, (string)
                       i.Current.Evaluate("string(link[1]/text())"));

   sqlpipe.SendResultsRow(record);
}

// signal end of results
sqlpipe.SendResultsEnd();

本新闻共10页,当前在第01页  01  02  03  04  05  06  07  08  09  10  

编辑:xker.com

上一篇:使用SQL Server 2005中的CLR 集成(1)
下一篇:SQL Server 2005 中的Multiple Active Result Set (MARS)
关闭窗口】【技术交流】【收藏此页
相关文章
·SQL Server 2005 中的Multiple Activ·使用SQL Server 2005中的CLR 集成(1)·保护SQL Server 2005 Express Editio
·在 SQL Server 2005 中查询表结构及索·在SQLSERVER2005中实现素数计算·SQL Server 2005中的SQLCMD工具使用
·SQL Server 2005生成直方图简介·SQL Server 2005数据转换服务中的模糊·SQL Server2005:构造最简单的模糊查找
·SQL Server2005 Analysis服务实践之起·SQL Server 2005关于数据类型最大值·从SQL Server 2005中处理 XML
·SQL Server 2005 数据转换服务的常见·通过SQL Server 2005索引视图提高性能·安装SQL Server 2005中的AdventureWo
推荐文章 最新文章 热门文章
·拒绝提示窗口 让操作自动赶走网络烦恼
·视频格式转换工具使用集锦
·通过SQL Server 2005索引视图提高性能
·SQL Server 2005新特性
·SOHO族安全建议-保证上传服务器安全
·服务器安全配置精华技巧
·缔造神话 十大怪招助你200%提升迅雷速
·有备无患 WinXP下软件数据大迁移
·流量牵引技术在防DOS攻击中的应用
·解决w3wp.exe内存占用问题
·IIS网站防盗链下载的解决方案
·怎样处理Java最终化的内存保留问题
·轮番上阵:Linux下查找漏洞的N种兵器
·毕业论文范文
·毕业论文格式
·SQL Server 2005 中的Multiple Activ
·使用SQL Server 2005中的CLR 集成(2)
·使用SQL Server 2005中的CLR 集成(1)
·保护SQL Server 2005 Express Editio
·在 SQL Server 2005 中查询表结构及索
·拒绝提示窗口 让操作自动赶走网络烦恼
·QQ表情终级大法让你比别人更炫
·新东方系列序列号(大全)
·豪杰超级解霸V9.2正版注册码
·QuickTime v7.0.4简体中文版注册码
·Protel 2006 简体中文版6.0安装序列号
·Visual Studio 2005安装序列号
·附加码在网络安全中的作用
·原来文件的时间属性也能修改
·VC和Delphi程序只运行一个实例的方法
·个人简历表格
·免费代理IP(每日更新)
·QQ密码丢失后能做的事情:快速找回密码
·Norton AntiVirus 2006 注册码(激活
·豪杰超级解霸V9.1正版注册码
·WinRAR 3.51 注册码
·系统优化 专题
·找回QQ密码的注意事项 
·史上最强QQ个人档案资料欣赏
·Ajax技术开发指南
·求职简历封皮
·最经典的黑客入门教材
·ACDSee v8.0注册码
·应届毕业生求职信
·怎样查找对方的IP地址
评论

设为首页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
Copyright © 2003-2006 xker.com All rights reserved.小新技术网 合作广告QQ:12231446
本页浏览次数: