使用ds.GetXml将类型化DataSet写入XML时,将从XML中删除具有空值的列。我知道这是因为架构没有写等等但有没有办法覆盖它而不必解析通过DataSet并在写入XML之前将所有数据库空值转换为空字符串?
编辑:其他信息:
1)我的主要任务是获取DataSet并将其流式传输到WebRequest。所以我正在创建一个XML文档
Dim xmldoc As New Xml.XmlDocument()
xmldoc.LoadXml(dsUpload.GetXml)
然后像这样
上传HTTpWebRequest(req)上的xmldocUsing xw As XmlTextWriter =
New XmlTextWriter(req.GetRequestStream, System.Text.Encoding.Default)
xw.Formatting = Formatting.Indented
xmldoc.WriteTo(xw)
xw.Close()
End Using
2)我在谈论DBNull
3)我需要显示这些列,因为我上传的网站需要包含所有标记,以便他们可以解析它(必须是遗留系统)
修改
1)我同意代码效率不高,但我没有提到的是上传方法是另一个类中的泛型方法。因此它接受XMLDoc,因为同样的方法将数据集的上载服务为xml和XML的硬编码字符串
2)是的,同意只有System.String可以转换为String.Empty.And,这主要是我的数据集。
3)关于遗留系统评论的LOL。这里有更多荒谬的东西。我认为它们可能解析XML就像它们将逗号分隔的文件一样。任何时候数据中都会有一个逗号将它抛出!! :)
答案 0 :(得分:3)
首先,我建议您永远不要将XML作为字符串处理。您应该始终使用对XML规则敏感的API。在这种情况下,您应该使用DataSet.WriteXml中的一个重载。
其次,当你说“null”时,你指的是DBNull吗?也就是说,数据库术语中是NULL,还是指C#中的值null
和VB.NET中的Nothing
?
最后,为什么要显示这些列?他们只占用空间。
编辑:
对代码的更正:此代码效率低下:将DataSet
保存到XML字符串,然后再次解析XML以加载到XmlDocument
,最后再次写出XML到请求流。它还使用XmlTextWriter
,从.NET 2.0开始不推荐使用Dim settings As New XmlWriterSettings With {.Indent = True}
Using stream = req.GetRequestStream
Using writer = XmlWriter.Create(stream, settings)
dsUpload.WriteXml(writer, XmlWriteMode.IgnoreSchema)
End Using
End Using
。以下是更清洁:
DBNull.Value
从研究来看,似乎没有一种简单的方法可以强制列出现。您可以使用其类型的默认值替换所有String.Empty
值(注意string
仅在列的.NET类型为DateTime
时才起作用。它不起作用例如,对于DBNull.Value
列。设置为AllowDBNull
以外的其他内容后,我认为您必须浏览表格中的所有列,并将其false
属性设置为{{1}}。
真正需要发生的是您上传到的网站需要学习XML。在这个时代,软件不能很好地理解XML以供你提供XML Schema以便他们理解所期望的列,这是不光彩的。
如果你觉得这是哪个网站我觉得很自在,我相信我们都会很高兴公开嘲笑他们。
: - )