1

DataSet を XML にエクスポートする必要がありますが、DBNull 値を持つすべてのセルが最終的な XML ファイルから消えます。DBNull 値はテーブルの中央にあるため、列 (dbnull を含む行) がシフトし、テーブル全体が改ざんされます。

public static string GetXmlFromDataSet(DataSet ds)
            {
                try
                {
                    StringWriter sw = new StringWriter();
                    ds.WriteXml(sw);
                    string outputXml = sw.ToString();

                    return outputXml;
                }
                catch (Exception ex)
                {
                    return ex.ToString();
                }
            }

次に、XslCompiledTransform により、ファイルが MS Excel で読み取り可能になります。しかし、一部のセルがないと使用できません。私は助けが必要です。

4

1 に答える 1

1

私はXMLパーサーを作成しましたが、これでこの問題は解決します。DataSet.WriteXMLデータセットに値が表示された場合DBNULL、XMLファイルには記録されません。

StandartメソッドDataSet.WriteXMLにはプロパティがありますXmlWriteModeXmlWriteMode.WriteSchemaXMLファイルの先頭でWriteXMLメソッドレコードスキーマを使用する場合。ただし、XMLをDataSetに変換する場合は機能します。私の場合、XMLファイルはを使用してExcelに変換されるXslCompiledTransformため、スキーマは役に立ちません。

これは私のソリューションのコードです:

try
{
   StringWriter sw = new StringWriter();

   //ds.WriteXml(sw, XmlWriteMode.IgnoreSchema);
   DataTable dt = ds.Tables[0];
   sw.Write(@"<NewDataSet>");
   foreach (DataRow row in dt.Rows)
   {
      sw.Write(@"<Table>");
      foreach (DataColumn col in dt.Columns)
      {
         sw.Write(@"<" + XmlConvert.EncodeName(col.ColumnName) + @">");
         sw.Write(row[col]);
         sw.Write(@"</" + XmlConvert.EncodeName(col.ColumnName) + @">");
      }
      sw.Write(@"</Table>");
   }
   sw.Write(@"</NewDataSet>");
   return sw.ToString();
}
catch (Exception ex)
{
   return ex.ToString();
}
于 2012-06-05T05:15:27.903 に答える