наборы данных xml и строго типизированные с конструктором набора данных - PullRequest
2 голосов
/ 19 июля 2010

Я не уверен, возможно ли это, но вот что я хочу сделать: я создал строго типизированный набор данных StrTypDS, используя конструктор набора данных в Visual Studio. Я также создал пустой XML-файл и добавил его в свой проект в качестве ресурса, чтобы к нему можно было получить доступ через Properties.Resources.xmlData. То, что я хотел бы сделать, это прочитать файл XML и посмотреть, соответствуют ли какие-либо данные схеме моего строго типизированного набора данных. Если есть совпадающие данные, я хочу прочитать их в наборе данных, чтобы я мог их обработать. Если нет совпадающих данных, я хочу записать схему в файл xml, чтобы я мог хранить строго типизированные данные для будущих чтений. Какой самый простой способ сделать это?

1 Ответ

0 голосов
/ 20 июля 2010

Невозможно выполнить запись в ресурс, поскольку файл ресурса скомпилирован в сборку.

Чтобы попытаться прочитать файлы XML в свой строго типизированный набор данных, используйте этот пример (VB.NET) ...

Я создал два типизированных набора данных ds1 и ds2 с разными схемами. Я выписываю два образца XML-файлов данных без их схем. Затем я пытаюсь прочитать каждый XML-файл в папке, чтобы найти XML-файл, который соответствует моему целевому строго типизированному набору данных. Если в моем целевом наборе данных есть данные после попытки чтения, схема соответствует.

Private Const InputFolder As String = "C:\xmlinputdata\"


Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    WriteTestXML()

    For Each s In IO.Directory.GetFiles(InputFolder, "*.xml")
        Dim dsTarget As New ds1

        dsTarget.ReadXml(s, Data.XmlReadMode.IgnoreSchema)

        If DatasetHasData(dsTarget) Then
            MsgBox(dsTarget.GetXml)
        End If
    Next

End Sub

Private Function DatasetHasData(ByVal ds As Data.DataSet) As Boolean
    For Each dt As Data.DataTable In ds.Tables
        If dt.Rows.Count > 0 Then
            Return True
        End If
    Next

    Return False
End Function

Private Sub WriteTestXML()
    Dim x As New ds1
    x.dt1.Adddt1Row("A", "B")
    x.dt1.Adddt1Row("C", "D")

    x.WriteXml(InputFolder & "ds1.xml", Data.XmlWriteMode.IgnoreSchema)

    Dim y As New ds2
    With y.dt2
        .Adddt2Row(1, 2, 3)
        .Adddt2Row(4, 5, 6)
    End With

    y.WriteXml(InputFolder & "ds2.xml", Data.XmlWriteMode.IgnoreSchema)
End Sub
...