데이터 섹션
데이터 섹션은 보류 중인 업데이트, 삽입 또는 삭제와 함께 행 집합의 데이터를 정의합니다. 데이터 섹션에는 0개 이상의 행이 포함될 수 있습니다. 행이 스키마에 의해 정의된 한 행 집합의 데이터만 포함할 수 있습니다. 또한 앞서 설명한 대로 데이터가 없는 열을 생략할 수 있습니다. 데이터 섹션에서 특성 또는 하위 요소가 사용되지만 스키마 섹션에서 해당 구문이 정의되지 않은 경우 자동으로 무시됩니다.
문자열
텍스트 데이터의 예약된 XML 문자를 적절한 문자 엔터티로 바꿔야 합니다. 예를 들어 회사 이름 "Joe's Garage"에서 큰따옴표를 엔터티로 바꿔야 합니다. 실제 행은 다음과 유사합니다.
<z:row CompanyName="Joe's Garage"/>
다음 문자는 XML에서 예약되어 있으며 다음 문자 엔터티로 대체되어야 합니다. {',",&,<,>}.
이진
이진 데이터는 bin.hex로 인코딩됩니다(즉, 1바이트가 니블당 한 문자씩 두 문자에 매핑됨).
DateTime
변형 VT_DATE 형식은 XML-Data 데이터 형식에서 직접 지원되지 않습니다. 데이터 및 시간 구성 요소가 둘 다 있는 날짜의 올바른 형식은 yyyy-mm-ddThh:mm:ss입니다.
XML로 지정된 날짜 형식에 대한 자세한 내용은 W3C XML-Data 사양을 참조하세요.
XML-Data 사양에서 두 개의 동일한 데이터 형식(예: i4 == int)을 정의하면 ADO는 친숙한 이름을 쓰지만 둘 다 읽습니다.
보류 중인 변경 내용 관리
레코드 집합은 즉시 또는 일괄 업데이트 모드로 열 수 있습니다. 클라이언트 쪽 커서를 사용하여 일괄 업데이트 모드로 열면 UpdateBatch 메서드가 호출될 때까지 레코드 집합에 대한 모든 변경 내용은 보류 중 상태입니다. 레코드 집합을 저장할 때 보류 중인 변경 내용도 유지됩니다. XML에서는 urn:schemas-microsoft-com:rowset에 정의된 "update" 요소의 사용으로 표시됩니다. 또한 행 집합을 업데이트할 수 있는 경우 업데이트 가능한 속성을 행 정의에서 true로 설정해야 합니다. 예를 들어 Shippers 테이블에 보류 중인 변경 내용이 포함되어 있음을 정의하려면 행 정의는 다음과 유사합니다.
<s:ElementType name="row" content="eltOnly" updatable="true">
<s:attribute type="ShipperID"/>
<s:attribute type="CompanyName"/>
<s:attribute type="Phone"/>
<s:extends type="rs:rowbase"/>
</s:ElementType>
이 정의는 ADO가 업데이트 가능한 Recordset 개체를 생성할 수 있도록 지속성 공급자가 데이터를 노출하도록 지시합니다.
다음 샘플 데이터는 지속형 파일에서 삽입, 변경 및 삭제가 어떻게 표시되는지 보여줍니다.
<rs:data>
<z:row ShipperID="2" CompanyName="United Package"
Phone="(503) 555-3199"/>
<rs:update>
<rs:original>
<z:row ShipperID="3" CompanyName="Federal Shipping"
Phone="(503) 555-9931"/>
</rs:original>
<z:row Phone="(503) 552-7134"/>
</rs:update>
<rs:insert>
<z:row ShipperID="12" CompanyName="Lightning Shipping"
Phone="(505) 111-2222"/>
<z:row ShipperID="13" CompanyName="Thunder Overnight"
Phone="(505) 111-2222"/>
<z:row ShipperID="14" CompanyName="Blue Angel Air Delivery"
Phone="(505) 111-2222"/>
</rs:insert>
<rs:delete>
<z:row ShipperID="1" CompanyName="Speedy Express" Phone="(503) 555-9831"/>
</rs:delete>
</rs:data>
업데이트에는 항상 전체 원래 행 데이터와 변경된 행 데이터가 차례로 포함됩니다. 변경된 행에는 모든 열 또는 실제로 변경된 열만 포함될 수 있습니다. 이전 예제에서 Shipper 2 행은 변경되지 않고 Phone 열만 Shipper 3의 값을 변경했으므로 이것이 변경된 행에 포함된 유일한 열입니다. Shipper 12, 13 및 14에 대해 삽입된 행은 하나의 rs:insert 태그 아래에 함께 일괄 처리됩니다. 이전 예제에는 표시되지 않지만 삭제된 행을 함께 일괄 처리할 수도 있습니다.