我想要使用SqlDataReader(我很了解Linq等的美,但我正在构建的应用程序部分是一个SQL生成器,所以Linq不适合我的需要)。不幸的是,我不确定使用SqlDataReader时的最佳实践。我在我的代码中的几个地方使用如下代码:SqlDataReader是否具有与字符串键相同的Get *(int index)?
using (SqlDataReader reader = ...)
{
int ID = reader.GetInt32(0);
int tableID = reader.GetInt32(1);
string fieldName = reader[2] as string;
...//More, similar code
}
但是感觉非常不稳定。如果数据库发生变化(在这种情况下实际上不太可能),代码就会中断。是否有一个等同于SqlDataReader的GetInt32,GetString,GetDecimal,需要一个列名而不是索引?在这种情况下什么被认为是最佳实践?什么是最快的?我的代码的这些部分是我的代码中最耗时的部分(我对它进行了几次简介),所以速度非常重要。
[编辑]
我知道使用索引用字符串的,我misworded以上。我正在运行缓慢的运行时间。我的代码工作正常,但我正在寻找任何可以在这些循环中偷回几秒钟的方法。通过字符串访问会减慢我的速度吗?我知道db访问是主要的时间密集型操作,对此我无能为力,所以我想减少访问每个元素的处理时间。
[编辑]
我决定只用GetOrdinal运行,除非某人有更具体的例子。我稍后会运行效率测试。我会尽量记住在我实际运行测试时发布它们。
改为使用int.Parse/TryParse。 – Femaref 2010-11-10 14:55:56
是的,我知道。我主要对速度感到好奇,如果这会让我的代码中最耗时的部分变得更慢。 – Crisfole 2010-11-10 15:01:01
@Femaref:为什么?我没有意识到Convert.ToInt32和int.Parse之间有明显的区别吗? – batwad 2010-11-10 16:37:11