首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么要使用SqlDataReader的GetOrdinal()方法

为什么要使用SqlDataReader的GetOrdinal()方法
EN

Stack Overflow用户
提问于 2009-07-03 13:30:28
回答 4查看 26.8K关注 0票数 20

使用以下语法从SqlDataReader读取值有什么区别:

代码语言:javascript
复制
Dim reader As SqlClient.SqlDataReader
reader("value").ToString()

代码语言:javascript
复制
Dim reader As SqlClient.SqlDataReader
reader.GetString(reader.GetOrdinal("value"))
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-07-03 13:33:58

我认为使用GetOrdinal()的原因是您可以缓存结果并多次重用它来提高性能。

例如。

代码语言:javascript
复制
Dim reader As SqlClient.SqlDataReader
int valueOrdinal = reader.GetOrdinal("value");
while ( ... )
{
    var value = reader.GetString(valueOrdinal);
}
票数 16
EN

Stack Overflow用户

发布于 2009-07-03 13:34:57

GetOrdinal首先执行区分大小写的查找。如果失败,则进行第二次不区分大小写的搜索。GetOrdinal是假名宽度的insensitive.Because,基于序号的查找比命名查找更有效,在循环中调用GetOrdinal的效率很低。通过调用GetOrdinal一次并将结果赋值给整数变量以在循环中使用来节省时间。

来源:http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getordinal.aspx

票数 8
EN

Stack Overflow用户

发布于 2012-12-20 10:06:50

我只想补充说,您期望的记录数量的上下文起着很大的作用,因为如果您返回单行,那么这两个行之间的性能差异将不会很大。但是,如果您正在循环许多行,那么使用类型化访问器会更好,因为它经过了优化。因此,在这种情况下,如果您需要通过使用列名来获得最佳性能,则调用GetOrdinal一次,将其放入变量中,然后在循环中使用带有列序号的类型化访问器。这将产生最佳性能。

如果您对性能差异感到好奇,请查看my blog post

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1079366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档