使用以下语法从SqlDataReader读取值有什么区别:
Dim reader As SqlClient.SqlDataReader
reader("value").ToString()
或
Dim reader As SqlClient.SqlDataReader
reader.GetString(reader.GetOrdinal("value"))
发布于 2009-07-03 13:33:58
我认为使用GetOrdinal()的原因是您可以缓存结果并多次重用它来提高性能。
例如。
Dim reader As SqlClient.SqlDataReader
int valueOrdinal = reader.GetOrdinal("value");
while ( ... )
{
var value = reader.GetString(valueOrdinal);
}
发布于 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
发布于 2012-12-20 10:06:50
我只想补充说,您期望的记录数量的上下文起着很大的作用,因为如果您返回单行,那么这两个行之间的性能差异将不会很大。但是,如果您正在循环许多行,那么使用类型化访问器会更好,因为它经过了优化。因此,在这种情况下,如果您需要通过使用列名来获得最佳性能,则调用GetOrdinal一次,将其放入变量中,然后在循环中使用带有列序号的类型化访问器。这将产生最佳性能。
如果您对性能差异感到好奇,请查看my blog post
https://stackoverflow.com/questions/1079366
复制相似问题