C# 使用特定方法从IDataReader获取价值有什么好处吗?
有多种方法可以从IDataReader获取值C# 使用特定方法从IDataReader获取价值有什么好处吗?,c#,database,C#,Database,有多种方法可以从IDataReader获取值 reader["FirstName"]; // by column name array style. reader[0]; // by index array style. reader.GetValue(0); // by index method style. reader.GetString(0); // by index using specific method. 其中一个比另一个好吗?它们中有没有性能缺陷?rea
reader["FirstName"]; // by column name array style.
reader[0]; // by index array style.
reader.GetValue(0); // by index method style.
reader.GetString(0); // by index using specific method.
其中一个比另一个好吗?它们中有没有性能缺陷?reader.GetValue(0)
是最快的方法
使用reader[“FirstName”]
调用reader.GetOrdinal(“FirstName”)
然后调用reader.GetValue(0)
reader[0]
只需在getter中调用reader.GetValue(0)
。reader.GetValue(0)
是最快的方法
使用
reader[“FirstName”]
调用reader.GetOrdinal(“FirstName”)
然后调用reader.GetValue(0)
reader[0]
只需在它的getter中调用reader.GetValue(0)
。很少有不应该使用列名的情况。从技术上讲,列名被转换为索引,因此直接使用索引会稍微快一些。然而,数据库调用本身会使这个裕度相形见绌,因此它实际上没有什么意义。和-假设您已将语义赋予返回的列,并且没有实现某种通用的数据处理器-使用索引很可能会在将来查询中的数据更改时意外引入错误。很少有不应该使用列名的情况。从技术上讲,列名被转换为索引,因此直接使用索引会稍微快一些。然而,数据库调用本身会使这个裕度相形见绌,因此它实际上没有什么意义。并且-假设您已将语义赋予返回的列,并且未实现某种通用数据处理器-使用索引更可能在将来查询中的数据更改时意外引入错误。从可读性角度看,我将使用列名变量,不过,从技术上讲,这实际上取决于使用的IDataReader的实现。由于IDataReader只是一个接口,因此没有任何与之相关的特定性能。使用SqlDataReader时,我同意上述说法。@AdamGritt,true,但这是来自OleDbDataReader
实现。您还必须计算调用GetString vs GetValue时涉及的强制转换/类型检查。我还想知道如何提前缓存名称/索引对,然后为每条记录调用GetValue(int)。这也取决于GetOrdinal的实现。不过,从可读性的角度来看,我会使用列名变量。从技术上讲,这实际上取决于使用的IDataReader的实现。由于IDataReader只是一个接口,因此没有任何与之相关的特定性能。使用SqlDataReader时,我同意上述说法。@AdamGritt,true,但这是来自OleDbDataReader
实现。您还必须计算调用GetString vs GetValue时涉及的强制转换/类型检查。我还想知道如何提前缓存名称/索引对,然后为每条记录调用GetValue(int)。这还取决于GetOrdinal的实现。