dataSet.GetXml() doesn't return xml for null or blank columns

后端 未结 4 936
名媛妹妹
名媛妹妹 2021-01-06 00:51

When I call dataSet.GetXml() I don\'t get any xml returned for columns with null or blank values. Is there a simple, efficient way to get around this? An example of the prob

4条回答
  •  独厮守ぢ
    2021-01-06 01:47

    I have been searching the whole world for a solution of writing null fields to XML using DataSet.WriteXML(). I found that following works in a performance optimized way. I have created a function for your convenience. Change your dataset tables one after the other by calling the following function and replacing the tables.

        private DataTable GetNullFilledDataTableForXML(DataTable dtSource)
        {
            // Create a target table with same structure as source and fields as strings
            // We can change the column datatype as long as there is no data loaded
            DataTable dtTarget = dtSource.Clone();
            foreach (DataColumn col in dtTarget.Columns)
                col.DataType = typeof(string);
    
            // Start importing the source into target by ItemArray copying which 
            // is found to be reasonably fast for nulk operations. VS 2015 is reporting
            // 500-525 milliseconds for loading 100,000 records x 10 columns 
            // after null conversion in every cell which may be usable in many
            // circumstances.
            // Machine config: i5 2nd Gen, 8 GB RAM, Windows 7 64bit, VS 2015 Update 1
            int colCountInTarget = dtTarget.Columns.Count;
            foreach (DataRow sourceRow in dtSource.Rows)
            {
                // Get a new row loaded with data from source row
                DataRow targetRow = dtTarget.NewRow();
                targetRow.ItemArray = sourceRow.ItemArray;
    
                // Update DBNull.Values to empty string in the new (target) row
                // We can safely assign empty string since the target table columns
                // are all of string type
                for (int ctr = 0; ctr < colCountInTarget; ctr++)
                    if (targetRow[ctr] == DBNull.Value)
                        targetRow[ctr] = String.Empty;
    
                // Now add the null filled row to target datatable
                dtTarget.Rows.Add(targetRow);
            }
    
            // Return the target datatable
            return dtTarget;
        }
    

提交回复
热议问题