所以我有一個我查詢數據到一個DataTable加載數據表到XML和XML回到一個DataTable
using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
{
DataSet dataSet = new DataSet();
adapter.Fill(dataSet, "AccessRights");
return dataSet.Tables[0];
}
現在我開始構建XML發送回客戶端
string tableData = null;
using(StringWriter sw = new StringWriter())
{
rightsTable.WriteXml(sw);
tableData = sw.ToString();
}
StringBuilder build = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(build, new XmlWriterSettings { OmitXmlDeclaration = true }))
{
writer.WriteStartElement("useraccess");
writer.WriteCData(xmlTable.OuterXml);
writer.WriteEndElement();
}
現在的客戶,我需要從XML
XmlCDataSection cDataNode = (XmlCDataSection)xdoc.SelectSingleNode("./mp_getindividualaccessrights_response/data/useraccess").ChildNodes[0];
string xmlDataString = cDataNode.Data.ToString();
StringReader sReader = new StringReader(xmlDataString);
string s = sReader.ToString();
DataSet ds = new DataSet();
ds.ReadXml(sReader);
return ds.Tables[0];
這工作如果在數據庫中的數據得到的數據表whic h將返回DataTable中的列和行
如果DataBase中沒有結果,那麼我希望列存儲在xml字符串中(當dt.WriteXml())時,即使存在沒有行數據。但是,當dt.WriteXml()返回的xml字符串是我不想要的空標記時會發生什麼。基本上我希望標籤在數據庫查詢中有列,即使沒有數據行,例如我知道一個事實DataTable有列(dt.Tables [0] .Columns.Count)我得到一個數字大於0,當我(dt.Tables [0] .Rows.Count)我得到0 。哪一個是好的原因當我查詢時,我沒有找到我期待的結果,但列仍然存在。但是現在我DataTable.WriteXML()列消失了。
我希望無論找到或不存在行,都要在xml字符串中顯示列。但DataTable.WriteXml似乎沒有正確地做到這一點。
有人可以幫助我解決這個問題。
編輯:增加了一些測試代碼爲了更好地說明這個問題
DataTable dt = new DataTable();
DataColumn[] dtc = new DataColumn[] { new DataColumn("Name"), new DataColumn("Age"), new DataColumn("Surname") };
DataSet ds = new DataSet();
ds.Tables.Add(dt);
dt.Columns.AddRange(dtc);
string xmlString = null;
using (StringWriter sw = new StringWriter())
{
ds.WriteXml(sw);
xmlString = sw.ToString();
}
XmlDocument doc = new XmlDocument();
StringBuilder build = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(build, new XmlWriterSettings { OmitXmlDeclaration = true }))
{
writer.WriteStartElement("Root");
writer.WriteCData(xmlString);
writer.WriteEndElement();
}
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(build.ToString());
XmlCDataSection cDataNode = (XmlCDataSection)xdoc.SelectSingleNode("./Root").ChildNodes[0];
string xmlDataString = cDataNode.Data.ToString();
StringReader sReader = new StringReader(xmlDataString);
DataSet ds1 = new DataSet();
ds1.ReadXml(sReader);
Console.WriteLine(ds1.Tables[0].Columns.Count);
Console.ReadLine();
從上面的圖片:這個回報會出現在我的DataTable沒有行,但數據表中確實有列其中沒有反映在我需要的xml中。所以基本上我需要有XML來看看如下
<DataSet>
<Name></Name>
<Age></Age>
<Surname></Surname>
<DataSet>
但ds.WriteXml()不允許此。
WriteXmlSchema/ReadXmlSchema有什麼問題? –
我添加了WriteXmlSchema/ReadXmlSchema,它的工作原理。謝謝 :) – SpaceApple