2

以下のコードは夢のように機能します。しかし、それをよりコンパクトでC#っぽくすることはできますか?特に私は2つの問題について疑いを持っています。

  1. fillパラメータとして使用して変数を埋めるのは醜い(古いCスタイル)ではありませんか?
  2. コードを通過する代わりに、コードをよりコンパクトにすることはできます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);
4

2 に答える 2

4

より C# っぽい、またはコンパクトにすることについてはわかりませんが、Adapter と StringWriter を閉じる必要があります。私ならusingブロックを使います。

   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);
于 2012-08-08T23:44:58.230 に答える
1

Holger の回答は非常に優れていますが、実際には Linq to XML を使用していました。出力が XmlDocument や XmlNode ではなく XElement である場合、私が彼のコードから Linq に活用したものはさらに洗練されていると思います。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;
于 2013-04-09T11:47:10.650 に答える