Dee*_*ons 4 c# sql ado.net sqlxml sqldatareader
我正在使用SqlXml和返回xml而不是原始数据的存储过程.返回时实际读取数据的方式是xml,并且不知道列名.我使用了以下版本,并且听说通过序数从SqlDataReader获取数据比通过列名更快.请提供最佳且有正当理由或证据的建议
sqlDataReaderInstance.GetString(0);
sqlDataReaderInstance[0];
并且听说通过序数从SqlDataReader获取数据比通过列名更快
您的示例都是通过索引(序号)获取数据,而不是列名:
通过列名获取数据:
while(reader.Read())
{
...
var value = reader["MyColumnName"];
...
}
Run Code Online (Sandbox Code Playgroud)
可能比通过索引获取数据要慢:
int myColumnIndex = reader.GetOrdinal("MyColumnName");
while(reader.Read())
{
...
var value = reader[myColumnIndex];
...
}
Run Code Online (Sandbox Code Playgroud)
因为第一个例子必须重复找到对应于"MyColumnName"的索引.如果您有非常多的行,那么差异甚至可能会很明显.
在大多数情况下,差异不会明显,因此有利于可读性.
UPDATE
如果您真的关心性能,使用序数的替代方法是使用DbEnumerator类,如下所示:
foreach(IDataRecord record in new DbEnumerator(reader))
{
...
var value = record["MyColumnName"];
...
}
Run Code Online (Sandbox Code Playgroud)
本DbEnumerator类读取模式一次,并认为列名映射到序数,从而提高性能的内部哈希表.