簡體   English   中英

表名稱的WriteXML,ReadXML問題

[英]WriteXML, ReadXML Issue with Table Name

我有一個程序,可以在其中運行查詢並將數據存儲在DataTable中。 然后,我允許用戶保存該DataTable.WriteXML。 我的問題是我想將保存的文件(XML文件)讀入另一個具有不同名稱的DataTable中-不允許這樣做! 它給我一個錯誤“將結果表加載到文件時出錯:數據表:'ImportTable'與源中的任何DataTable不匹配”

現在,我相信此消息告訴我,XML包含與我嘗試將XML讀入其中的DataTable不同的表名。 我嘗試將TableName屬性設置為空白-但這沒有任何區別。

所以-我的問題是其他人如何解決這個問題? 我正在使用標准的DataTable.WriteXML(filename)-和DataTable.ReadXML方法調用。 由於某些設計問題,而且-我確實需要將導入數據表的命名與用於導出數據的命名不同。

有沒有其他方法可以寫出和讀入DataTable中的數據來解決此問題?

示例代碼-顯示問題在表單加載中-創建兩個表-一個名為Export,另一個名為Import。 為導出創建一個結構-並填充10條記錄。

    private void Form_Main_Load(object sender, EventArgs e)
    {
        ExportTable = new DataTable("Export");
        ImportTable = new DataTable("Import");

        ExportTable.Columns.Add("ID", Type.GetType("System.Int32"));
        ExportTable.Columns.Add("Name", Type.GetType("System.String"));
        ExportTable.Columns.Add("Amount", Type.GetType("System.Int32"));

        // Populate the first one
        DataRow workRow;
        for (int i = 0; i <= 9; i++)
        {
            workRow = ExportTable.NewRow();
            workRow[0] = i;
            workRow[1] = "CustName" + i.ToString();
            workRow[2] = i;
            ExportTable.Rows.Add(workRow);
        }
    }

然后創建兩個按鈕-一個用於導出數據-另一個用於導入數據。

    private void button_Export_Click(object sender, EventArgs e)
    {
        ExportTable.WriteXml("c:\\Temp\\TableOut.xml");
    }

    private void button_Import_Click(object sender, EventArgs e)
    {
        ImportTable.ReadXmlSchema("c:\\Temp\\TableOut.xml");
        ImportTable.ReadXml("c:\\Temp\\TableOut.xml");
    }

運行程序-導出數據-然后單擊“導入”按鈕。 當您這樣做時-您將收到錯誤-“數據表'導入'與源中的任何數據表都不匹配。” 現在-我意識到這是因為XML在XML中嵌入了Export表名。 在我的情況下,我需要將該數據導入一個具有不同名稱的數據表中-我想知道其他人過去如何(以及是否)對此進行了處理? 您是否手動更改了XML中的名稱? 您是否臨時更改了數據表名稱? 還是有另一個更好的方法可以解決此問題,即嘗試使用DataTable的READXML方法?

好的-我一直在玩這個-並找到解決方案。 不確定它是否是最好的(我將對我如何做得更好表示贊賞)。

基本上,我要做的就是將XML寫入字符串讀取器-更改模式和記錄元素的表名。 <>和標記。
然后,當我讀入它時-我必須做相反的事情-基本上將文件讀入字符串中-然后將所有表名改回我需要的名稱。 然后,我不得不將文件寫到磁盤(臨時文件)中,然后使用ReadXML方法讀取該臨時文件,然后刪除該文件。 我不確定為什么帶字符串閱讀器的ReadXML不能正常工作(這似乎是一個有效的參數)-但是我發現一些帖子指出READXML方法和字符串閱讀器存在問題-所以我只寫了一下歸檔並使用READXML和文件名-效果很好。

我希望這對其他人有幫助-即使這不是“最佳”解決方案-也許其他人也可以對此進行改進。

寫XML

// Write XML
StringWriter sw = new StringWriter();
ResultDT.WriteXml(sw, XmlWriteMode.WriteSchema);
string OutputXML = sw.ToString();
// now replace the Table Name
OutputXML = OutputXML.Replace("<" + ResultDT.TableName + ">", "<" + "ExportTable" + ">");
OutputXML = OutputXML.Replace("</" + ResultDT.TableName + ">", "</" + "ExportTable" + ">");
OutputXML = OutputXML.Replace("MainDataTable=\"" + ResultDT.TableName + "\"", "MainDataTable=\"" + "ExportTable" + "\"");
OutputXML = OutputXML.Replace("name=\"" + ResultDT.TableName + "\"", "name=\"" + "ExportTable" + "\"");
System.IO.File.WriteAllText(fileName, OutputXML);

讀取XML

// Read XML
InputXML = System.IO.File.ReadAllText(fileName);
// now replace the Table Name
InputXML = InputXML.Replace("<" + "ExportTable" + ">", "<" + ResultTable.TableName + ">");
InputXML = InputXML.Replace("</" + "ExportTable" + ">", "</" + ResultTable.TableName + ">");
InputXML = InputXML.Replace("MainDataTable=\"" + "ExportTable" + "\"", "MainDataTable=\"" + ResultTable.TableName + "\"");
InputXML = InputXML.Replace("name=\"" + "ExportTable" + "\"", "name=\"" + ResultTable.TableName + "\"");
string TempFileName = "TempDumpFile.idt";
System.IO.File.WriteAllText(TempFileName, InputXML);
ResultTable.ReadXmlSchema(TempFileName);
ResultTable.ReadXml(TempFileName);
System.IO.File.Delete(TempFileName);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM