为什么输出xml文件为空?

时间:2011-09-01 03:45:16

标签: c# xml dataset

我试图通过从数据集中提取数据来输出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

2 个答案:

答案 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);
    }
}

如果在您的溪流上调用出售后,您仍然看不到任何可能无数据的内容。