Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, <Аноним>, Вы писали:
А>>Может я не так понимаю как отобразить связанные таблицы в XML. Если сохранять их датасетовским методом, то в выходном файле остатся записи о ключах, которые мне не нужны.
S>Таак, теперь пошла уже запись в XML, который до сих пор мы только читали.
S>Постарайся сосредоточиться (крайне рекомендую отказаться от препаратов, искажающих сознание), перечитать свои постинги и 1 (один) раз внятно объяснить, что тебе нужно, а не что ты делаешь. Какие записи? Куда остаются? Зачем тебе отображать что-то куда-то?
Ok, постараюсь.
S> Ты не знаешь, как добавлять констреинты в DataTable.Constraints?
знаю
Начну с самого начала.
В моей клиентской программе отображаются три связанные таблички. Все связи добавлены в DataSet и все работает нормально. Стоит задача — обеспечить возможность экспорта этих табличек в XML(в определенном виде), а также импорта данных из XML файла(который также создан в определенном виде).
Экспорт данных в XML я сделал. Т.к. метод DataSet.WriteXml мне не подошел, потому что требуется определенный вид выходного XML файла, то экспорт пришлось сделать вручную.
Теперь осталось сделать импорт из XML файла с заданной структурой.
Вот такую структуру XML файла от меня требуют:
<?xml version="1.0" encoding="windows-1251"?>
<EXPORT> - это основной нод
<CODE_TABLE S_INCKEY="1"> - это имя таблицы и проперти в виде имени ключа и его значения
<CODE>code1</CODE>
<CREATEDT>23.05.2007 10:15:37</CREATEDT>
.........
<ADD_CODE1> - вот здесь начинается перечисление записей ПЕРВОЙ зависимой таблицы которые соответсвуют S_INCKEY="1"
.........
</ADD_CODE1>
<ADD_CODE1> - следующая строчка зависимой таблицы и т.д.
.........
</ADD_CODE1>
<ADD_CODE1>
.........
</ADD_CODE1>
... и т.д.
<ADD_CODE2> - вот здесь начинается перечисление записей ВТОРОЙ зависимой таблицы которые соответсвуют S_INCKEY="1"
.........
</ADD_CODE2>
... и т.д.
</CODE_TABLE>
далее идет следующая запись CODE_TABLE, уже с другим ключем (S_INCKEY="2") и т.д.
....
</EXPORT>
Такую структуру я сформировал вручную из ДатаСета, в котором отображаются 3 зависимые таблицы.
Теперь надо прочитать такой XML файл и сформировать из него ДатаСет из 3х зависимых таблиц.
Или построчно читать XML файл следующим образом: прочитать запись CODE_TABLE которая соответствует S_INCKEY="1" и добавить ее в базу и так до конца.
Вот именно с этим этапом у меня возникли затруднения.
Здравствуйте, <Аноним>, Вы писали:
А>Такую структуру я сформировал вручную из ДатаСета, в котором отображаются 3 зависимые таблицы.
А>Теперь надо прочитать такой XML файл и сформировать из него ДатаСет из 3х зависимых таблиц.
А>Или построчно читать XML файл следующим образом: прочитать запись CODE_TABLE которая соответствует S_INCKEY="1" и добавить ее в базу и так до конца.
А>Вот именно с этим этапом у меня возникли затруднения.
Смотри класс XmlDocument. А лучше — написать xslt, который перегонит твой xml в xml, кторый сможет обработать DataSet.ReadXml.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всем привет.
Позвольте поднять тему — у меня схожая проблема.
Eсть xsd-схема:
<xs:element name="DataSet">
<xs:complexType>
<xs:sequence>
<xs:element name="Table1" >
<xs:complexType>
<xs:sequence>
<xs:element name="Field1" >
<xs:element name="Field2" />
<xs:element name="Table2" >
<xs:complexType>
<xs:sequence>
<xs:element name="Field1" />
<xs:element name="Field2" />
</xs:sequence>
</xs:complexType>
</xs:element>
Как видно, таблица Table2 "вложена" в Table1.
Когда я загружаю схему в DataSet с помощью ReadXmlSchema, в обеих таблицах автоматически создаются поля Table1_Id и формируется связь Table2.Table1_Id -> Table1.Table1_Id.
Теперь мне нужно как-то научиться управлять созданием этого ключа. Т.е. самому описать в XSD какие именно поля должны связывать таблицы.
Немного поковырявшись, нашел такой способ:
<xs:unique name="Constrain1">
<xs:selector xpath=".//Table1" />
<xs:field xpath="@link" />
</xs:unique>
<xs:keyref name="Relation1" refer="Constrain1">
<xs:selector xpath=".//Table2" />
<xs:field xpath="@link_up" />
</xs:keyref>
Действительно, связь создается. Но и автоматическая при этом не пропадает.
Помогите, плиз, справиться с излишней самостоятельностью десериалайзера.
Здравствуйте, <Аноним>, Вы писали:
А>Есть XML файл, примерно такой:
А>Когда я читаю его методом DataSeta — ReadXML, то получается 2 не связанные таблицы. Но мне необходимо считывать учитывая данные связи. Может это можно сделать вручную?
перед тем как загружать xml, загрузи вначале в датасет схему данных (XSD), где у тебя будет описана связь таблиц...
... << RSDN@Home 1.2.0 alpha rev. 676>>