微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 WPF C# 将我的 SQL 数据库导出为 XML

如何解决使用 WPF C# 将我的 SQL 数据库导出为 XML

我想使用我的 WPF C# 应用程序代码导出数据库并将其保存在 XML 文件中。这是我正在使用的代码

private void btnSave_Click(object sender,RoutedEventArgs e)
{
    string FILENAME = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory,"Connection.xml");

    XDocument xdoc = XDocument.Load(FILENAME);

    string conn = xdoc.Descendants("connectionStrings").FirstOrDefault().Value;

    string query = "SELECT TOP 1000 [EMPID],[EMPName],[EMPRole],[EMPAddress],[EMPEmail],[EMPNumber] FROM [Login].[dbo].[tblEMP1] FOR XML PATH('ry'),ROOT('ty') ";

    using (sqlConnection sqlCon = new sqlConnection(conn))
    using (sqlCommand sqlCmd = new sqlCommand(query,sqlCon))
    { 
        sqlCon.open();
        string result = sqlCmd.ExecuteScalar().ToString();
        MessageBox.Show("XML Saved");
        sqlCon.Close();

        File.WriteallText(@"C:\Users\user12\Desktop\test3.xml",result);
    }
}

问题是它没有显示我想要的 xml 标签,例如 <ty>,<ry>,<EMPID>,<EMPName> 等不会出现。 XML 在 Microsoft sql Server Management Studio 上运行良好。这是我在 Microsoft sql Server Management Studio 上运行 XML 时的样子。

<ty>
  <ry>
    <EMPID>1</EMPID>
    <EMPName>Thabo</EMPName>
    <EMPRole>Developer </EMPRole>
    <EMPAddress>227 Complex B WoodMans Road  Claremont</EMPAddress>
    <EMPEmail>Thabecoo@hotmail.com</EMPEmail>
    <EMPNumber>083 577 8910</EMPNumber>
  </ry>
  <ry>
    <EMPID>2</EMPID>
    <EMPName>Aldrin</EMPName>
    <EMPRole>Analyst   </EMPRole>
    <EMPAddress>65 Mfecane Avenue</EMPAddress>
    <EMPEmail>AGFFHH@tommail.com</EMPEmail>
    <EMPNumber>0872343352</EMPNumber>
  </ry>
  <ry>
    <EMPID>4</EMPID>
    <EMPName>Amoleng</EMPName>
    <EMPRole>Engineer  </EMPRole>
    <EMPAddress>43 Pixely KaSeme Street</EMPAddress>
    <EMPEmail>AmoT@axxess.co.za</EMPEmail>
    <EMPNumber>0765546832</EMPNumber>
  </ry>

</ty>

但是当我在 Visual Studio 上使用我的应用程序保存它时。这就是我得到的结果(使用浏览器作为 XML 打开时):

1ThaboDeveloper 227 Complex B WoodMans Road ClaremontThabecoo@hotmail.com083 577 89102AldrinAnalyst 65 Mfecane AvenueAGFFHH@tommail.com08723433524AmolengEngineer 43 Pixely KaSeme StreetAmoT@axxess.co.za07655468325

如你所见,一切都聚集在一起,没有标签

当我用记事本打开它时会发生这种情况;

<ty><ry><EMPID>1</EMPID><EMPName>Thabo</EMPName><EMPRole>Developer </EMPRole><EMPAddress>227 Complex B WoodMans Road  Claremont</EMPAddress><EMPEmail>Thabecoo@hotmail.com</EMPEmail><EMPNumber>083 577 8910</EMPNumber></ry><ry><EMPID>2</EMPID><EMPName>Aldrin</EMPName><EMPRole>Analyst   </EMPRole><EMPAddress>65 Mfecane Avenue</EMPAddress><EMPEmail>AGFFHH@tommail.com</EMPEmail><EMPNumber>0872343352</EMPNumber></ry><ry><EMPID>4</EMPID><EMPName>Amoleng</EMPName><EMPRole>Engineer  </EMPRole><EMPAddress>43 Pixely KaSeme Street</EMPAddress><EMPEmail>AmoT@axxess.co.za</EMPEmail><EMPNumber>0765546832</EMPNumber></ry>

正如你所看到的,标签现在出现了,但它仍然聚集在一起。

我的目标是准备好使用不需要额外操作和编辑的 XML,我希望标签始终以正确的布局出现,就像在 sql Server Management Studio 示例中一样。

提前致谢。

解决方法

如果您查看原始 xml(使用记事本打开时),您将缺少一个结束 </ty> 标记

<ty>
<ry>[snipped content]</ry>
<ry>[snipped content]</ry>

没有结束 </ty> 标记,这就是浏览器将其呈现为一行的原因,并非所有浏览器都这样做,一些(chrome)会提示错误:

enter image description here

检查您是否从 sqlCmd.ExecuteScalar().ToString(); 取回了这个结束标记;或不。它正在沿线某处被截断/删除(假设您的记事本复制/粘贴是准确的)

,

请尝试以下解决方案。

c#

void Main()
{
    const string OUTFILENAME = @"C:\Users\user12\Desktop\test3.xml";

    try
    {
        string FILENAME = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory,"Connection.xml");
        XDocument xdoc = XDocument.Load(FILENAME);
        string conn = xdoc.Descendants("connectionStrings").FirstOrDefault().Value;

        using (SqlConnection con = new SqlConnection(conn))
        using (SqlCommand cmd = new SqlCommand())
        {
            // dynamic SQL
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = "SELECT TOP 1000 [EMPID],[EMPName],[EMPRole],[EMPAddress],[EMPEmail],[EMPNumber] FROM [Login].[dbo].[tblEMP1] FOR XML PATH('ry'),TYPE,ROOT('ty')";

            con.Open();

            using (XmlReader reader = cmd.ExecuteXmlReader())
            {
                XDocument xdocoutput = XDocument.Load(reader);

                var settings = new XmlWriterSettings();
                settings.Indent = true;
                settings.OmitXmlDeclaration = false;
                settings.IndentChars = "\t";
                // to remove BOM
                settings.Encoding = new UTF8Encoding(false);

                using (var writer = XmlWriter.Create(OUTFILENAME,settings))
                {
                    xdocoutput.Save(writer);
                }
            }
            Console.WriteLine("File '{0}' has been created.",OUTFILENAME);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Connection failed with the following exception...");
        Console.WriteLine(ex.Message.ToString());
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?