如何解决使用 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)会提示错误:
检查您是否从 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 举报,一经查实,本站将立刻删除。