2010-07-21 4 views
2

데이터베이스에 보존해야하는 약 20,000 개의 개체 모음이 있습니다. 이제 20,000 개의 insert 문을 수행하는 대신 XML 매개 변수를 사용하여 모든 레코드를 전달하려고합니다.개체 일련화 - 값 바꾸기

개체를 serialize하고 프로 시저로 전달하는 한 모든 설정이 완료되었습니다. 그러나 누구나 다음을 수행하는 우아한 방법이 있는지 궁금합니다.

C# 코드 기반; 데이터베이스에 저장할 때 NULL을 나타내는 정적 값이 있습니다. 예를 들어, 정수가 -1이거나 DateTime이 DateTime.MinValue와 같은 경우; NULL을 저장하십시오. 우리는 객체를 저장할 때 이것을 처리하는 우리만의 작은 사용자 정의 구현을 가지고 있습니다.

XML 직렬화를 수행 할 때 이와 비슷한 작업을 수행 할 수있는 방법이 있습니까? 지금은 -1과 DateTime.MinValue를 XML에 출력하고 있습니다. 저장된 값이 null 기본값 인 경우 true/false를 반환하는 확장 메서드 (IsNull())가 있습니다.

제안 사항? 팁 & 트릭?

+1

3.5를 사용하는 경우 null 값에 'Nullable '대신 예약 된 값을 사용하는 이유는 무엇입니까? –

+0

@Adam :'Nullable '이 .NET 2.0에서 소개되었습니다. - not 3.5 – STW

+0

* 이제 20,000 개의 insert 문 대신 XML 매개 변수를 사용하여 모든 레코드를 전달하고 싶습니다. * Whoa there, cowboy! 다시 한 번 뒤로 물러서서 XML에 커밋하기 전에 이러한 종류의 쿼리를 위해 설계된 BULK INSERT 문을 살펴보십시오. http://msdn.microsoft.com/en-us/library/ms188365.aspx – Juliet

답변

0

XmlSerializer는 여러 가지 다양한 특성을 인식합니다. 그 중 하나는 DefaultValueAttribute입니다. 실제 값이 기본값과 다른 경우

포함

, XmlSerializer를 단지 그래서 당신이 필요합니다 모든이며, 값 검사를 직렬화합니다

[DefaultValue(-1)] 
public int SomeProperty 
{get;set;} 

을 또한, 당신이 그것을 고려하지 않은 경우를 취할 SqlBulkCopy 클래스를 살펴보십시오.이 클래스는 많은 수의 레코드를 SQL Server로 전송하는 데 매우 효과적입니다.

0

IXmlSerializable을 구현하여 객체의 XML 직렬화를 제어 할 수 있습니다. 특히 빈 기호 값 또는값 (null signifier 값이 들어있는 필드/속성에 대해이 값을 처리하려고 함)을 구현하려면 WriteXml을 구현하십시오.