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

Tes*_*act 18 sqldatareader

使用以下语法从SqlDataReader读取值之间的区别是什么:

Dim reader As SqlClient.SqlDataReader
reader("value").ToString()
Run Code Online (Sandbox Code Playgroud)

要么

Dim reader As SqlClient.SqlDataReader
reader.GetString(reader.GetOrdinal("value"))
Run Code Online (Sandbox Code Playgroud)

Ale*_*ack 12

我认为使用GetOrdinal()的原因是您可以缓存结果并多次重复使用它以获得性能.

例如

Dim reader As SqlClient.SqlDataReader
int valueOrdinal = reader.GetOrdinal("value");
while ( ... )
{
    var value = reader.GetString(valueOrdinal);
}
Run Code Online (Sandbox Code Playgroud)

  • 我对Web API服务进行了性能测试,该服务从DB存储过程(具有多个结果集)读取大约30-40条记录,并返回大约8K大小的Json.在这个测试中,我将所有GetOrdinal()替换为静态int常量,结果我的性能提高了2%......所以创建这种类型的列名缓存是否值得努力? - 我想在大多数情况下没有.从数据库读取数据和数据序列化到Json真正的风格将更多地影响性能,所以我认为当你已经优化了其他所有内容时,最后一件事就是缓存. (3认同)

joe*_*joe 7

GetOrdinal首先执行区分大小写的查找.如果失败,则进行第二次不区分大小写的搜索.GetOrdinal由于基于序数的查找比命名查找更有效,因此GetOrdinal在循环内调用效率很低.通过调用GetOrdinal一次并将结果分配给整数变量来节省时间,以便在循环中使用.

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

  • Word for Word复制并粘贴自http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.getordinal.aspx ;-) (8认同)
  • 好吧,至少归于它. (5认同)
  • 为什么不直接链接到整篇文章?他的评论缺少很多内容. (4认同)
  • 通常,您不是简单地链接到整篇文章,因为它可能永远不可用,它也需要很多时间.您引用相关部分并链接到它. (4认同)