2013-02-12 1 views
-2

У меня есть поле, которое хранится в базе данных в виде строки. Это фактически разделенная запятыми строка чисел, которую я конвертирую в список длин. Строки кода, которые делают преобразование выглядеть примерно так:может хранить данные в базе данных, иногда приводит к повреждению данных?

TheListOfLongs = (from string s in StringFromDB.Split(',') 
        select Convert.ToInt64(s)).ToList<long>(); 

код, который создает строку хранения базы данных выглядит следующим образом:

return String.Join(",", TheListOfLongs.Select(x=> x.ToString()).ToArray()); 

Это прекрасно работает, но как вы можете видеть, если для по какой-то причине возникает проблема со строкой, код в первой строке кода разбивается на Convert.ToInt64(s).

Теперь я знаю, что может обернуть все это вокруг try заявления, но мой вопрос заключается в следующем: можно хранить и извлекать строки в базе данных коррумпированной строки (в этом случае я, безусловно, нуждаюсь в try заявлении) или это один триллион странного типа события?

+1

Как выглядит запись, «разрывается на' Convert.ToInt64 (s) '?? – Yuck

+0

@Yuck: ну это не сломается (на данный момент). Это строка числа, разделенная запятыми: 28983,3553,57523,5334,35543,4636343,16941,4223,53534 .... – frenchie

+2

Нет, база данных не будет произвольно «повреждать данные» за вашей спиной. Да, незаконные данные могут попасть в базу данных, если вы строго не подтвердите ее до «вставки» или «обновления». [GIGO] (http://en.wikipedia.org/wiki/Garbage_in,_garbage_out). И да, если вы абсолютно не уверены, что * ничего * будет * когда-либо ошибаться (знаменитые последние слова!), Вы должны обязательно скопировать правильную обработку ошибок в соответствующем месте. ИМХО ... – paulsm4

ответ

1

Я бы не беспокоился о коррумпированных данных как таковых. Тем не менее, вам определенно необходимо обработать более общий случай, когда вы не можете разобрать, что должно быть числовыми данными.

Даже в самых контролируемых ситуациях это хорошая практика программирования, чтобы обеспечить условия, когда вы не можете обрабатывать данные, как вы ожидаете. Что это означает для вашего приложения - это то, что вам нужно будет решить. Обертка оператора с помощью try..catch не позволит вашему приложению удушаться, но может оказаться неприемлемым, если критический список будет критическим позже.

1

Выбор из БД не должен искажать вашу строку.

Если соединение сбрасывается в середине передачи или что-то в этом роде, генерируется исключение.

Смежные вопросы