使用以下语法从SqlDataReader中读取值有什么区别:
Dim reader As SqlClient.SqlDataReader
reader("value").ToString()
或者
Dim reader As SqlClient.SqlDataReader
reader.GetString(reader.GetOrdinal("value"))
使用以下语法从SqlDataReader中读取值有什么区别:
Dim reader As SqlClient.SqlDataReader
reader("value").ToString()
或者
Dim reader As SqlClient.SqlDataReader
reader.GetString(reader.GetOrdinal("value"))
我认为使用GetOrdinal()的原因在于可以缓存该结果并在多次使用时提高性能。
例如:
Dim reader As SqlClient.SqlDataReader
int valueOrdinal = reader.GetOrdinal("value");
while ( ... )
{
var value = reader.GetString(valueOrdinal);
}
GetOrdinal
首先执行区分大小写的查找。如果失败,就进行第二次不区分大小写的搜索。GetOrdinal
在假名宽度上是不敏感的。由于基于序号的查找比命名查找更有效率,在循环中调用GetOrdinal
是低效的。通过调用GetOrdinal
一次并将结果赋值给一个整数变量以在循环中使用来节省时间。select
physical_column_name as "MyFieldName"
已经编写了一个方法,应该是自解释的,
public Dictionary<String, Int32> GetOrdinalsByName(DbDataReader reader)
那么,我的作业看起来就像这样
public void BindRow(DbDataReader dr)
{
TerminationDate = dr.GetDateTime(_columnOrdinals["TerminationDate"]);
字典执行接近于O(1); 因此,这是性能和可维护性之间的合理权衡。