0

在 C# 中,通过整数索引还是通过命名索引,哪一种更有效地读取读取器对象?

ad.Name = reader.GetString(0);

或者

ad.Name = reader["Name"].ToString();
4

3 回答 3

3

name重载需要先找到索引。

MSDN

首先执行区分大小写的查找。如果失败,则进行第二次不区分大小写的搜索(使用数据库排序规则进行不区分大小写的比较)。当比较受到特定区域性大小写规则的影响时,可能会出现意外结果。例如,在土耳其语中,以下示例会产生错误的结果,因为土耳其语中的文件系统没有对“file”中的字母“i”使用语言大小写规则。

Getordinal(因此使用):

因为基于序号的查找比命名查找更有效,所以在循环中调用 GetOrdinal 是低效的。通过调用一次 GetOrdinal 并将结果分配给一个整数变量以在循环中使用来节省时间。

所以在循环中,查找序数索引一次并在循环体中重用它可能会更有效。

但是,名称查找由使用非常有效的类支持。HashTable

于 2013-10-29T08:11:51.667 回答
0
ad.Name = reader["Name"].ToString();

这是最有效的方式。

因为虽然你在后面更改了数据库表结构,但是因为你直接提到了列名,所以不会对这段代码产生影响。

但是对于列索引,当您在该列之前向表中添加任何列时,它会发生变化。

于 2013-10-29T08:09:47.973 回答
0

reader.GetString(index);

这将获取该列索引处的行值作为字符串,第二种解决方案更理想,因为它允许您以自己喜欢的类型获取该索引处的值。

例子:-

String name = reader["Name"].ToString();
int age = (int) reader["Age"]
于 2013-10-29T08:14:42.067 回答