2013-02-12 3 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 조 가지 이상한 사건?

+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). 그리고 네, 당신이 절대 * 아무것도 * 절대 * 잘못 * 갈 것입니다 (유명한 마지막 단어!), 당신은 분명히 적절한 장소에서 올바른 오류 처리를 코딩해야합니다. IMHO ... – paulsm4

답변

1

에 대해 걱정할 필요가 없습니다. 데이터 그 자체입니다. 그러나 숫자 데이터이어야하는 구문 분석 할 수없는보다 일반적인 경우를 처리해야합니다.

대부분의 제어 상황에서도 예상 할 수있는 것처럼 데이터를 처리 할 수없는 경우를 대비하는 조건을 제공하는 것이 좋은 프로그래밍 습관입니다. 귀하의 신청서가 의미하는 바는 귀하가 결정할 필요가있는 것입니다. 문을 try..catch으로 마무리하면 응용 프로그램이 질식하는 것을 방지 할 수 있지만 나중에 구문 분석 된 목록이 중요 할 경우 적절하지 않을 수 있습니다.

1

DB에서 선택하면 문자열이 손상되지 않아야합니다.

전송이 중간에서 끊긴 경우 또는 예외가 발생하면 예외가 발생합니다.