2010-05-26 105 views
3

我想使用.writeXml函数创建DataSet的XML。 如果我的数据集的条目是空的,我想有一个空的标签,而不是缺少标签:如果字段为空,dataSet.writeXml不写入空标记C#

例如,它应该如何看就像如果约翰没有年龄:

<MyDataSet> 
    <ID>8613458</ID> 
    <AW_ID>37534778</AW_ID> 
    <NAME>Peter</NAME> 
    <AGE>22</AGE> 
    </MyDataSet> 
    <MyDataSet> 
    <ID>8613459</ID> 
    <AW_ID>37534779</AW_ID> 
    <NAME>John</NAME> 
    <AGE></AGE> 
    </MyDataSet> 

例如如何看起来像现在:

<MyDataSet> 
    <ID>8613458</ID> 
    <AW_ID>37534778</AW_ID> 
    <NAME>Peter</NAME> 
    <AGE>22</AGE> 
    </MyDataSet> 
    <MyDataSet> 
    <ID>8613459</ID> 
    <AW_ID>37534779</AW_ID> 
    <NAME>John</NAME> 
    </MyDataSet> 

你知道我需要做什么吗? 感谢您的帮助!

回答

1

我不认为你可以改变,以便它写入空值,如果它们是NULL,因为NULL与空不同。
但是,如果age的数据类型是字符串,则只需遍历数据集并在将任何NULL写入空字符串之前将其更改为空字符串,然后获得所需的效果。

+2

感谢。没有在我的情况下工作,因为我没有任何字符串。 但我发现我的问题的另一种解决方案: 而不是使用.WriteXml(sting fileName)我使用.WriteXml(字符串文件名,XmlWriteMode WriteSchema) - >这个结果是,DBNull变成了“0”丢失标签 – Christoph 2010-05-26 16:14:57

+0

@Christoph谢谢你,这个解决方案让我真正头痛:) – QFDev 2014-07-17 13:32:25

0

您可以使用WriteXmlSchema(和ReadXmlSchema)来存储表的模式。这将意味着虽然XML列中不包含NULL列,但它们仍然可以正确导入。

using (SqlCommand sqlCommand = new SqlCommand(QUERY, CONNECTION)) 
{ 
    SqlDataAdapter dataAdapter = new SqlDataAdapter(sqlCommand); 
    DataSet dataSet = new DataSet(); 
    dataAdapter.Fill(dataSet); 
    dataSet.WriteXmlSchema(@"C:\TEMP\Schema.xsd"); 
    dataSet.Tables[0].WriteXml(@"C:\TEMP\Output.xml"); 
} 

有上有一个真正有用的文章在这里:Save Dataset to XML With Null Values