Почему выходной файл xml пуст? - PullRequest
       2

Почему выходной файл xml пуст?

0 голосов
/ 01 сентября 2011

Я пытаюсь вывести файл 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 напрямую, однако не могу найти, какое пространство имен должнобыть ссылки.Я искал WriteXml в MSDN, но не смог найти пространство имен System.Data.DataSet, которое указано на странице метода WriteXml.

Спасибо

SuT

Ответы [ 2 ]

5 голосов
/ 01 сентября 2011

Вы должны вызвать Flush метод.

3 голосов
/ 01 сентября 2011

Ваш код пропускает ресурсы, всегда немедленно выбрасывайте одноразовые предметы.В противном случае вы будете оставлять файлы заблокированными и использовать ресурсы.Close не вызывает 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);
    }
}

Если после вызова dispose в ваших потоках вы по-прежнему не видите ничего, вероятно, нет данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...