【发布时间】:2021-09-04 02:18:27
【问题描述】:
我想使用我的 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 文件,它是否会出错?从我可以看到记事本输出很好,格式取决于您使用的编辑器,对大多数解析器无关紧要。
-
ExecuteScalar 是该查询的错误方法。见docs.microsoft.com/en-us/dotnet/api/…
-
问题可能出在记事本上。微软最近更新了记事本以支持 linux。自此更新以来,我得到了与您相同的结果。我尝试了补丁,但它没有工作。请参阅:devblogs.microsoft.com/commandline/extended-eol-in-notepad
标签: c# sql-server xml database