SqlDataReader - Как преобразовать текущую строку в словарь

Существует много типов использования текстовых полей с паролем в ASP. NET MVC

С элементами управления html это будет выглядеть так:

<input type="password" name="xx" id="yy">

С Razor-синтаксисом это будет похоже на:

@Html.Password(name, value, html_attributes)

Или в строго типизированном виде мог написать

@Html.PasswordFor(model=>model.Password)
28
задан Martin 26 May 2009 в 21:51
поделиться

3 ответа

Это уже IDataRecord .

Это должно дать вам примерно такой же доступ (по ключу), что и словарь. Поскольку в строках обычно не более нескольких горсток столбцов, производительность поиска не должна сильно отличаться. Единственное важное различие - это тип «полезной нагрузки», и даже там ваш словарь должен будет использовать объект для типа значения, поэтому я даю преимущество IDataRecord.

1
ответ дан 28 November 2019 в 02:28
поделиться

Проще, чем это?:

// Need to read the row in, usually in a while ( opReader.Read ) {} loop...
opReader.Read();

// Convert current row into a dictionary
Dictionary<string, object> dict = new Dictionary<string, object>();
for( int lp = 0 ; lp < opReader.FieldCount ; lp++ ) {
    dict.Add(opReader.GetName(lp), opReader.GetValue(lp));
}

Я все еще не уверен, зачем вам нужно именно это преобразование из одного типа коллекции в другой.

25
ответ дан 28 November 2019 в 02:28
поделиться

Я никогда не использовал Java, но с тех пор, как я прочитал

Я совершенно уверен, что мне не нравятся проверенные исключения (в текущей реализации).

Два основных упомянутых момента заключаются в следующем.

Версионность

Андерс Хейлсберг: Давайте начнем с управления версиями, потому что проблемы там довольно легко увидеть. Скажем, я создаю метод foo, который объявляет, что он генерирует исключения A, B и C. Во второй версии foo я хочу добавить кучу функций, и теперь foo может генерировать исключение D. Это критическое изменение для меня. добавьте D в предложение throws этого метода, потому что существующий вызывающий этого метода почти наверняка не обработает это исключение.

Добавление нового исключения в предложение throws в новой версии приводит к нарушению клиентского кода. Это похоже на добавление метода в интерфейс. После публикации интерфейса он остается неизменным для всех практических целей, потому что в любой его реализации могут быть методы, которые вы хотите добавить в следующую версию. Поэтому вместо этого вам нужно создать новый интерфейс. Точно так же с исключениями вам придется либо создать полностью новый метод с именем foo2, который генерирует больше исключений, либо вам придется перехватить исключение D в новом foo и преобразовать D в A, B или C.

Масштабируемость

Андерс Хейлсберг: Проблема масштабируемости в некоторой степени связана с проблемой версии. В небольших, проверенные исключения очень заманчивы. На небольшом примере вы можете показать, что действительно проверили, что вы поймали FileNotFoundException, и разве это не здорово? Что ж, это нормально, когда вы просто вызываете один API. Проблема начинается, когда вы начинаете строить большие системы, в которых вы разговариваете с четырьмя или пятью различными подсистемами. Каждая подсистема выдает от четырех до десяти исключений. Теперь, каждый раз, когда вы поднимаетесь по лестнице агрегации, у вас под вами появляется экспоненциальная иерархия исключений, с которыми вам приходится иметь дело. В итоге вам придется объявить 40 исключений, которые вы можете выбросить. И как только вы объедините это с другой подсистемой, у вас будет 80 исключений в вашем предложении throws. Он просто выходит из-под контроля.

В целом, отмеченные исключения становятся таким раздражителем, что люди полностью обходят эту функцию. Либо они говорят «бросает исключение» везде; или - и я не могу сказать вам, сколько раз я это видел - они говорят: «Попробуй, да да да да да, Это поможет?

0
ответ дан 28 November 2019 в 02:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: