我试图通过从数据集中提取数据来输出XML文件。但是,xml文件始终为空。你能帮我找一下代码中的错误吗?
class Program
{
static void Main(string[] args)
{
string umail = "";
XDocument loaded = XDocument.Load(@"C:\1.xml");
var q = from c in loaded.Descendants("AdminUserDB.dbo.U_User")
select (string)c.Element("URI");
foreach (string em in q)
umail = em;
SqlConnection cn = new SqlConnection("server=(local);database=AdminUserDB;Persist Security Info=True; uid=sa;pwd=P@swrd123");
cn.Open();
DataSet ds = new DataSet();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM dbo.U_User WHERE URI=@umail", cn);
da.SelectCommand.Parameters.AddWithValue("@umail", umail);
da.Fill(ds);
string filename = "output.xml";
System.IO.FileStream myFileStream = new System.IO.FileStream(filename, System.IO.FileMode.Create);
System.Xml.XmlTextWriter myXmlWriter = new System.Xml.XmlTextWriter(myFileStream, System.Text.Encoding.Unicode);
ds.WriteXml(myXmlWriter);
myXmlWriter.Close();
cn.Close();
}
}
}
我也试图直接使用DataSet.WriteXml方法,但是,我找不到应该引用哪个命名空间。我在MSDN上搜索了WriteXml,但是我找不到System.Data.DataSet命名空间,它在WriteXml方法页面上列出。
由于
SUT
答案 0 :(得分:5)
您应该调用Flush
方法。
答案 1 :(得分:3)
您的代码正在泄漏资源,请务必立即处理一次性对象。否则你将保持文件锁定,并消耗资源。关闭不会调用Dispose。
DataSet ds = new DataSet();
using(SqlConnection cn = new SqlConnection("server=(local);database=AdminUserDB;Persist Security Info=True; uid=sa;pwd=P@swrd123"))
{
cn.Open();
using(SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM dbo.U_User WHERE URI=@umail", cn))
{
da.SelectCommand.Parameters.AddWithValue("@umail", umail);
da.Fill(ds);
}
}
string filename = "output.xml";
using(FileStream myFileStream = new FileStream(filename, FileMode.Create))
{
using(XmlTextWriter myXmlWriter = new XmlTextWriter(myFileStream, Encoding.Unicode))
{
ds.WriteXml(myXmlWriter);
}
}
如果在您的溪流上调用出售后,您仍然看不到任何可能无数据的内容。