Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么输出xml文件为空?_C#_Xml_Dataset - Fatal编程技术网

C# 为什么输出xml文件为空?

C# 为什么输出xml文件为空?,c#,xml,dataset,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.d

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

您应该调用
Flush
方法。

您的代码正在泄漏资源,请务必立即处置一次性对象。否则,您将使文件处于锁定状态,并消耗资源。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后仍然没有看到任何内容,则可能没有数据。

顺便说一句,我已经在SQL Server上直接尝试了select查询脚本,它可以得到正确的查询结果。我希望连接字符串无效:)您是否尝试了
XmlWriter
而不是
XmlTextWriter
?我没有看到使用
XmlTextWriter
DataSet.WriteXml
的重载。你是说myXmlWriter.Flush()?我试过了,但xml文件仍在清空/处理流调用flush。谢谢您的回答。我尝试过你的方法,但是新创建的XML只有一个属性。我认为数据集中有些错误。但是,我用select查询脚本检查数据库,它工作正常。在
da.Fill(ds)
之后放一个断点,看看它是否包含任何数据。这就是xml文件没有数据的原因。您有一个奇怪的for循环设置
umail
。检查此值是否也是调试器中所期望的值。看起来您没有在查询中选择任何数据。