Имеет ли SqlDataReader эквивалент Get * (int index) со строковым ключом? - PullRequest
0 голосов
/ 10 ноября 2010

Я пытаюсь использовать SqlDataReader (я прекрасно осведомлен о красоте Linq и т. Д., Но приложение, которое я создаю, частично является Sql Generator, поэтому Linq не соответствует моим потребностям).К сожалению, я не уверен, что лучшие практики при использовании SqlDataReader.Я использую код, подобный следующему, в нескольких местах моего кода:

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, который принимает имя столбца вместо индекса?Что считается лучшей практикой в ​​этом случае?Что быстрее?Эти части моего кода являются наиболее интенсивными по времени частями моего кода (я его профилировал несколько раз), поэтому скорость важна.

[EDIT]

Я знаю об использовании индексатора со строкой, я неправильно сформулировал вышесказанное.Я бегу в медленное время выполнения.Мой код работает нормально, но я ищу какой-нибудь способ, которым я могу украсть несколько секунд внутри этих циклов.Замедлит ли меня доступ через строку?Я знаю, что db-доступ - это основная операция, требующая значительных временных затрат, и я ничего не могу с этим поделать, поэтому я хочу сократить время обработки для каждого элемента, к которому осуществляется доступ.

[EDIT]

Я решил просто запустить GetOrdinal, если у кого-то нет более конкретных примеров.Я проведу тест эффективности позже.Я постараюсь не разглашать их, когда я действительно запускаю тесты.

1 Ответ

4 голосов
/ 10 ноября 2010

Свойство indexer принимает строковый ключ, поэтому вы можете сделать следующее:

reader["text_column"] as string;
Convert.ToInt32(reader["numeric_column"]);

Дополнительное предложение

Если вас беспокоит поиск строкиесли вы работаете медленно и предполагаете, что числовой поиск выполняется быстрее, вы можете попробовать использовать GetOrdinal, чтобы найти индексы столбцов, прежде чем просматривать большой набор результатов.

int textColumnIndex = reader.GetOrdinal("text_column");
int numericColumnIndex = reader.GetOrdinal("numeric_column");
while (reader.Read())
{
    string text = reader[textColumnIndex] as string;
    int number = Convert.ToInt32(reader[numericColumnIndex]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...