Reading SQL to DataSet to XmlDocument

2019-02-25 19:04发布

The code below works dreamy. But can it be made more compact and C#'ish? Especially i have suspicions regarding two issues.

  1. Isn't it ugly (old C-style) filling fill a variable by using it as a in-parameter?
  2. Can the code be made more compact instead of going through a String?

C#

String
  connectionString = "...",
  sqlStatement = "select * from Test",
  output = "";

SqlDataAdapter adapter = new SqlDataAdapter(sqlStatement, connectionString);
DataSet dataSet = new DataSet("Contents");
adapter.Fill(dataSet, "Test");
StringWriter stringWriter=new StringWriter();
dataSet.WriteXml(new XmlTextWriter(stringWriter));
XmlDocument document = new XmlDocument();
output = stringWriter.ToString();
document.LoadXml(output);

标签: c# xml dataset
2条回答
祖国的老花朵
2楼-- · 2019-02-25 19:34

Although Holger's answer is really good, I was actually working with Linq to XML. What I leveraged from his code into Linq is even more elegant, I think, if your output is an XElement instead of an XmlDocument or an XmlNode. You also don't need to cast to XmlTextWriter.

String
   strConnection = "...",
   strSQL = "select * from Test",

XElement objOutput = null;

DataSet objDataSet = new DataSet("output");

using (SqlDataAdapter objAdapter = new SqlDataAdapter(strSQL, strConnection)){
    objAdapter.Fill(objDataSet, "row");}
using (StringWriter objWriter = new StringWriter()) { 
  objDataSet.WriteXml(objWriter);
  XDocument objDoc = XDocument.Parse(objDataSet.GetXml());
  objOutput = objDoc.Root;
};
return objOutput;
查看更多
趁早两清
3楼-- · 2019-02-25 19:36

I don't know about making it more C#ish or compact, but you do need to close your Adapter and StringWriter. I would use the using block.

   String
       connectionString = "...",
       sqlStatement = "select * from Test",
       output = "";

    DataSet dataSet = new DataSet("Contents");
    using (SqlDataAdapter adapter = new SqlDataAdapter(sqlStatement, connectionString)){
        adapter.Fill(dataSet, "Test");}
    using (StringWriter stringWriter = new StringWriter()) { 
      dataSet.WriteXml(new XmlTextWriter(stringWriter));
      output = stringWriter.ToString();
    };
    XmlDocument document = new XmlDocument();
    document.LoadXml(output);
查看更多
登录 后发表回答