使用SqlDataReader
类,以下之间的功能差异(如果有)是什么:
(string) dataReader["MyFieldName"];
和
dataReader.GetString(dataReader.GetOrdinal("MyFieldName"));
最佳答案
抛开选角问题不谈,对于单一的召唤来说,不存在任何问题。索引器将调用 DbDataReader.GetOrdinal
然后调用适当的 Get
方法来获取值(请注意,使用序号调用 Get
方法比使用带有字段名称的索引器更快) .
但是,这每次都会导致序数的查找。如果您以只进、只读的方式迭代多个记录(这正是 DbDataReader
实例的目的),那么您可以减少此查找的开销只需一次即可。
你可以这样做:
// Move to the first record. If no records, get out.
if (!dataReader.Read()) return;
// Before the loop. Can do this for any other fields being
// accessed in the loop as well.
int myFieldNameOrdinal = dataReader.GetOrdinal("MyFieldName");
// Process the records. Remember, already on the first record, so
// use do/while here.
do
{
// Do something with your field.
Console.WriteLine(dataReader.GetString(myFieldNameOrdinal));
} while (dataReader.Read());
关于.NET SqlDataReader Item[] 与 GetString(GetOrdinal())?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6020117/