Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用特定方法从IDataReader获取价值有什么好处吗?_C#_Database - Fatal编程技术网

C# 使用特定方法从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

有多种方法可以从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.
其中一个比另一个好吗?它们中有没有性能缺陷?

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的实现。