<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Upgrade from 6.5 to 7.3    BluePrism.AutomateProcessCore.dll not having the DataType function in Upgrade Support</title>
    <link>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123949#M12</link>
    <description>&lt;P&gt;I think it would be worth having a developer redesign this to try using one of the standard objects in order to read a CSV. It may be necessary to do it like this, but I wonder if it is still necessary or not. That is a lot of code to do something that we usually don't need special logic for. Of course I'm just making a guess here without any real context.&lt;/P&gt;&lt;P&gt;If you are for sure trying to keep all that code, I would imagine you can fix it quite quickly and easily using Cursor or GitHub Copilot. The AI agents designed for writing code are specifically really good at fixing code when they have a reference. In this case, you'd have a project where you drop that code in and then add references to the various Blue Prism DLL files, and then ask the LLM to figure out what should be changed based on the available classes and functions in the new DLL files.&lt;BR /&gt;&lt;BR /&gt;Is this something you or someone on your team is comfortable trying to do?&lt;/P&gt;</description>
    <pubDate>Thu, 11 Dec 2025 17:47:38 GMT</pubDate>
    <dc:creator>david.l.morris</dc:creator>
    <dc:date>2025-12-11T17:47:38Z</dc:date>
    <item>
      <title>Upgrade from 6.5 to 7.3  - How to handle custom code compile errors</title>
      <link>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123929#M5</link>
      <description>&lt;P&gt;Alot of our custom object now have compile errors in version 7.3 due to the below error. Does anyone know what the new "function" for DataType is within the&amp;nbsp;AutomateProcessCore.dll for 7.3? I cant see any comparable type that i can update the code to use. Any help would be greatly appreciated.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Page: Initialise&lt;BR /&gt;Stage: Stage1&lt;BR /&gt;Type: Error&lt;BR /&gt;Action: Validate&lt;BR /&gt;Description: Compiler error at line 80: The type or namespace name 'DataType' does not exist in the namespace 'BluePrism.AutomateProcessCore' (are you missing an assembly reference?)&lt;BR /&gt;Repairable: No&lt;/P&gt;
&lt;P&gt;Example of how it is being used currently:&lt;/P&gt;
&lt;DIV&gt;DataTable In2 = FixTimeIssue(Input, BPVersionMajor);&lt;/DIV&gt;
&lt;DIV&gt;DataTable data;&lt;/DIV&gt;
&lt;DIV&gt;ExtractSingleColumn(In2, Column_Name, out data);&lt;/DIV&gt;
&lt;DIV&gt;// Add a count row&lt;/DIV&gt;
&lt;DIV&gt;DataColumn col = new DataColumn("Count", typeof(Decimal));&lt;/DIV&gt;
&lt;DIV&gt;col.ExtendedProperties.Add("bptype", BluePrism.AutomateProcessCore.DataType.number);&lt;/DIV&gt;
&lt;DIV&gt;data.Columns.Add(col);&lt;/DIV&gt;
&lt;DIV&gt;foreach (DataRow row in data.Rows)&lt;/DIV&gt;
&lt;DIV&gt;{&lt;/DIV&gt;
&lt;DIV&gt;&lt;SPAN&gt;row[col] = 1;&lt;/SPAN&gt;&lt;/DIV&gt;
&lt;DIV&gt;}&lt;/DIV&gt;
&lt;DIV&gt;// Now collapse the table to sum the rows&lt;/DIV&gt;
&lt;DIV&gt;Output = CollapseTable(data, new List&amp;lt;String&amp;gt;(){Column_Name}, new List&amp;lt;String&amp;gt;(){"Count"});&lt;/DIV&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 24 Feb 2026 11:12:50 GMT</pubDate>
      <guid>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123929#M5</guid>
      <dc:creator>TrevorMclellan21</dc:creator>
      <dc:date>2026-02-24T11:12:50Z</dc:date>
    </item>
    <item>
      <title>Re: Upgrade from 6.5 to 7.3    BluePrism.AutomateProcessCore.dll not having the DataType function</title>
      <link>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123931#M6</link>
      <description>&lt;P&gt;upgrading from 6.5 to 7.x , Blueprism.automateprocesscore.datatype related error is common, its mainly due to internal library changes.&lt;/P&gt;&lt;P&gt;In BP 7.x core assemblies, namespaces and internal DLL structures probably got changed&lt;/P&gt;&lt;P&gt;- AutomateProcessCore.dll fefactored&lt;/P&gt;&lt;P&gt;- DataType handling engine modified&lt;/P&gt;&lt;P&gt;- Some DataType classes moved or renamed&lt;/P&gt;&lt;P&gt;- New Unicode + .Net 4.8 compatibility updates&lt;/P&gt;</description>
      <pubDate>Wed, 10 Dec 2025 20:38:00 GMT</pubDate>
      <guid>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123931#M6</guid>
      <dc:creator>naveed_raza</dc:creator>
      <dc:date>2025-12-10T20:38:00Z</dc:date>
    </item>
    <item>
      <title>Re: Upgrade from 6.5 to 7.3    BluePrism.AutomateProcessCore.dll not having the DataType function</title>
      <link>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123932#M7</link>
      <description>&lt;P&gt;Hi Naveed,&lt;/P&gt;&lt;P&gt;Thanks for your response. Do you have any ideas on how to resolve this error? Is there another function in the updated dll i can reference that will accomplish the same thing?&lt;/P&gt;</description>
      <pubDate>Wed, 10 Dec 2025 20:41:23 GMT</pubDate>
      <guid>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123932#M7</guid>
      <dc:creator>TrevorMclellan21</dc:creator>
      <dc:date>2025-12-10T20:41:23Z</dc:date>
    </item>
    <item>
      <title>Re: Upgrade from 6.5 to 7.3    BluePrism.AutomateProcessCore.dll not having the DataType function</title>
      <link>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123933#M8</link>
      <description>&lt;P&gt;One thing i can say is, try to re-import the release and see&lt;/P&gt;</description>
      <pubDate>Wed, 10 Dec 2025 21:27:16 GMT</pubDate>
      <guid>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123933#M8</guid>
      <dc:creator>naveed_raza</dc:creator>
      <dc:date>2025-12-10T21:27:16Z</dc:date>
    </item>
    <item>
      <title>Re: Upgrade from 6.5 to 7.3    BluePrism.AutomateProcessCore.dll not having the DataType function</title>
      <link>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123937#M9</link>
      <description>&lt;P&gt;&lt;a href="https://community.blueprism.com/t5/user/viewprofilepage/user-id/2590"&gt;@david.l.morris&lt;/a&gt;&amp;nbsp;- am I right in thinking you migrated to 7.3? Did you experience anything similar?&lt;/P&gt;</description>
      <pubDate>Thu, 11 Dec 2025 08:04:22 GMT</pubDate>
      <guid>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123937#M9</guid>
      <dc:creator>Michael_S</dc:creator>
      <dc:date>2025-12-11T08:04:22Z</dc:date>
    </item>
    <item>
      <title>Re: Upgrade from 6.5 to 7.3    BluePrism.AutomateProcessCore.dll not having the DataType function</title>
      <link>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123942#M10</link>
      <description>&lt;P&gt;&lt;a href="https://community.blueprism.com/t5/user/viewprofilepage/user-id/65308"&gt;@TrevorMclellan21&lt;/a&gt;&amp;nbsp;Change this line:&lt;/P&gt;&lt;P&gt;col.ExtendedProperties.Add("bptype", BluePrism.AutomateProcessCore.DataType.number);&lt;/P&gt;&lt;P&gt;To this:&lt;BR /&gt;col.ExtendedProperties.Add("bptype", BluePrism.AutomateProcessCore.ProcessDataTypes.DataTypeId("number"));&lt;/P&gt;&lt;P&gt;I only tested part of your code since I don't know what those other functions do, but this works to add a number datatype field to a DataTable. I'm not sure what the difference is between that and a Decimal DataType as I would assume this is the same thing, but I'm just suggesting this so you are able to adjust your existing code as minimally as possible. Let me know if you still have an issue.&lt;/P&gt;&lt;P&gt;Note that if you test this outside of Blue Prism, you may also have to add BluePrism.Core.dll as a reference, but at least in 7.5 I didn't have to add that separately as a reference in the object. It worked for me to simply change the one line above.&lt;/P&gt;&lt;P&gt;&lt;a href="https://community.blueprism.com/t5/user/viewprofilepage/user-id/15"&gt;@Michael_S&lt;/a&gt;&amp;nbsp;Thanks for the ping. We did upgrade through 6.5 -&amp;gt; 6.10 -&amp;gt; 7.3 -&amp;gt; 7.4 -&amp;gt; 7.5 in our evaluation environment, but I hadn't run into this. I just assumed Blue Prism likely reorganized some things in the code and glanced around a bit to find that the code should work with that small adjustment.&lt;/P&gt;</description>
      <pubDate>Thu, 11 Dec 2025 13:51:15 GMT</pubDate>
      <guid>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123942#M10</guid>
      <dc:creator>david.l.morris</dc:creator>
      <dc:date>2025-12-11T13:51:15Z</dc:date>
    </item>
    <item>
      <title>Re: Upgrade from 6.5 to 7.3    BluePrism.AutomateProcessCore.dll not having the DataType function</title>
      <link>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123948#M11</link>
      <description>&lt;P&gt;Hi David,&lt;/P&gt;&lt;P&gt;This worked! Thanks! Unfortunately i have now discovered another object which is using this datatype field and it is much more complex. Its being used in the global code section and I have tried to update it the same way I did the other actions but I am getting a bunch of new errors such as the ones seen in the attached screenshot.&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="TrevorMclellan21_0-1765470739547.png" style="width: 400px;"&gt;&lt;img src="https://community.blueprism.com/t5/image/serverpage/image-id/41800i51ADB721CAEB5E7B/image-size/medium/is-moderation-mode/true?v=v2&amp;amp;px=400" role="button" title="TrevorMclellan21_0-1765470739547.png" alt="TrevorMclellan21_0-1765470739547.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;Below I have copied the code from before my edits. I did not write this code but the main purpose of this object is to read CSVs. I have a feeling something to do with the dictionaries is breaking it but I'm really not sure. Any help on this would be awesome.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;DIV&gt;static DataTable FixTimeIssue(DataTable table, Decimal BPVersionMajor) // from Collection Storage object&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (BPVersionMajor != 5)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return table;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Boolean needsFixing = false;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (DataColumn col in table.Columns)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (col.DataType.Equals(typeof(DateTime)))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;needsFixing = true;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (!needsFixing)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return table;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataRow newRow;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataTable result = new DataTable();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result.TableName = table.TableName;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (DataColumn col in table.Columns)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataColumn newCol = new DataColumn(col.ColumnName, col.DataType);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (col.ExtendedProperties.Contains("bptype"))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;newCol.ExtendedProperties.Add("bptype", col.ExtendedProperties["bptype"]);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (newCol.DataType.Equals(typeof(DateTime)))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;newCol.DateTimeMode = DataSetDateTime.Utc;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result.Columns.Add(newCol);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (DataRow row in table.Rows)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;newRow = result.NewRow();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (DataColumn col in table.Columns)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (col.DataType.Equals(typeof(DateTime)))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;newRow[col.ColumnName] = DateTime.SpecifyKind(Convert.ToDateTime(row[col.ColumnName]), DateTimeKind.Utc);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;newRow[col.ColumnName] = row[col.ColumnName];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result.Rows.Add(newRow);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static Dictionary&amp;lt;String, BluePrism.AutomateProcessCore.DataType&amp;gt; string2BpType = new Dictionary&amp;lt;String, BluePrism.AutomateProcessCore.DataType&amp;gt;()&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"collection", BluePrism.AutomateProcessCore.DataType.collection},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"date", BluePrism.AutomateProcessCore.DataType.date},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"datetime", BluePrism.AutomateProcessCore.DataType.datetime},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"flag", BluePrism.AutomateProcessCore.DataType.flag},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"number", BluePrism.AutomateProcessCore.DataType.number},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"password", BluePrism.AutomateProcessCore.DataType.password},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"text", BluePrism.AutomateProcessCore.DataType.text},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"time", BluePrism.AutomateProcessCore.DataType.time},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"timespan", BluePrism.AutomateProcessCore.DataType.timespan},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;};&lt;/DIV&gt;&lt;DIV&gt;static Dictionary&amp;lt;String, Type&amp;gt; string2CsType = new Dictionary&amp;lt;String, Type&amp;gt;()&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"collection", typeof(DataTable)},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"date", typeof(DateTime)},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"datetime", typeof(DateTime)},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"flag", typeof(Boolean)},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"number", typeof(Decimal)},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"password", typeof(String)},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"text", typeof(String)},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"time", typeof(DateTime)},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{"timespan", typeof(DateTime)},&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;};&lt;/DIV&gt;&lt;DIV&gt;class TypeStruct&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public BluePrism.AutomateProcessCore.DataType bptype;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public Type csType;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public Boolean couldBe;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public Regex regexTest;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public String formatString;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public Decimal typePriority;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public TypeStruct(BluePrism.AutomateProcessCore.DataType bpdatatype, Type datatype, String test, Decimal priority)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;bptype = bpdatatype;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;csType = datatype;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;couldBe = true;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;regexTest = new Regex(test);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;formatString = "";&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;typePriority = priority;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public TypeStruct(BluePrism.AutomateProcessCore.DataType bpdatatype, Type datatype, String test, String format, Decimal priority)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;bptype = bpdatatype;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;csType = datatype;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;couldBe = true;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;regexTest = new Regex(test);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;formatString = format;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;typePriority = priority;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public override String ToString()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return "bptype: " + bptype.ToString() + " format: " + formatString + "valid?: " + couldBe.ToString();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;class ColumnType&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public String colName;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public BluePrism.AutomateProcessCore.DataType bptype;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public Type csType;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public String formatString;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public ColumnType(String columnName, TypeStruct columnType)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;colName = columnName;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;bptype = columnType.bptype;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;csType = columnType.csType;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;formatString = columnType.formatString;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public ColumnType(String columnName, String bptypeString, String formatCode)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;colName = columnName;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;bptype = string2BpType[bptypeString];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;csType = string2CsType[bptypeString];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;formatString = formatCode;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public override String ToString()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return "Col: " + colName + " bptype: " + bptype.ToString() + "Format: " + formatString;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;class TypeFinder : IEnumerable&amp;lt;TypeStruct&amp;gt;&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public List&amp;lt;TypeStruct&amp;gt; typeList;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public Int32 CountTypes()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 counter = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (TypeStruct ts in typeList)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (ts.couldBe)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;counter ++;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return counter;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public TypeStruct GetDataType()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 validTypeCount = CountTypes();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;TypeStruct defaultType = new TypeStruct(BluePrism.AutomateProcessCore.DataType.text, typeof(String), @".*", 0);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (validTypeCount == 0)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return defaultType;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (validTypeCount == 1)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (TypeStruct ts in typeList)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (ts.couldBe)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return ts;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;throw new InvalidOperationException("TypeFinder.GetType - This code should be unreachable.");&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return defaultType;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public TypeFinder()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;typeList = new List&amp;lt;TypeStruct&amp;gt;(){&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.number, typeof(Decimal), @"^\d*$", 1),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.flag, typeof(Boolean), @"^(True|true|False|false)?$", 1),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.date, typeof(DateTime), @"^\d{4}-[01]\d-[0-3]\d$", @"yyyy-MM-dd", 10),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.date, typeof(DateTime), @"^[01]\d\/[0-3]\d\/\d{4}$", @"dd/MM/yyyy", 10),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.date, typeof(DateTime), @"^[0123]?\d\/[01]?\d\/\d{4}$", @"d/M/yyyy", 9),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.date, typeof(DateTime), @"^[0123]\d\/[01]\d\/\d{4}$", @"MM/dd/yyyy", 8),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.date, typeof(DateTime), @"^[01]?\d\/[0123]?\d\/\d{4}$", @"M/d/yyyy", 7),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.datetime, typeof(DateTime), @"^\d{4}-[01]\d-[0-3]\d \d{2}:\d{2}$", @"yyyy-MM-dd hh:mm", 10),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.datetime, typeof(DateTime), @"^\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d$", @"yyyy-MM-dd HH:mm:ss", 10),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.datetime, typeof(DateTime), @"^\d{4}-[01]\d-[0-3]\d [0-1]\d:[0-5]\d:[0-5]\d [AP]M$", @"yyyy-MM-dd hh:mm:ss tt", 10),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.time, typeof(DateTime), @"^[0-2]\d:[0-5]\d$", @"HH:mm", 10),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.time, typeof(DateTime), @"^[0-1]\d:[0-5]\d [AP]M$", @"hh:mm tt", 10),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.time, typeof(DateTime), @"^[0-2]\d:[0-5]\d:[0-5]\d$", @"HH:mm:ss", 10),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;new TypeStruct(BluePrism.AutomateProcessCore.DataType.time, typeof(DateTime), @"10:59:59 AM", @"hh:mm:ss tt", 10),&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;};&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;public IEnumerator&amp;lt;TypeStruct&amp;gt; GetEnumerator()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return typeList.GetEnumerator();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;IEnumerator IEnumerable.GetEnumerator()&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return GetEnumerator();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static String NumberToLetters(Int32 number)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;/*&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Converts column numbers to Excel-style column labels (e.g. 1-&amp;gt; A, 2 -&amp;gt; B, 27 -&amp;gt; AA)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;*/&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 colNum = Convert.ToInt32(number);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 i3 = 0, i2 = 0, i1 = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String s3 = "", s2 = "", s1 = "";&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (colNum &amp;gt; 0)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;i1 = (colNum - 1) % 26;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;s1 = ((char)(65 + i1)).ToString();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (colNum &amp;gt; 26)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;i2 = ( ( (colNum - i1) / 26 ) - 1 ) % 26;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;s2 = ((char)(65 + i2)).ToString();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (colNum &amp;gt; 702)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;i3 = ( ( (colNum - i2 - i1) / 676 ) - 1) % 26;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;s3 = ((char)(65 + i3)).ToString();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return s3 + s2 + s1;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static Char separatorChar =&amp;nbsp; ',';&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static List&amp;lt;String&amp;gt; SplitLine(String content)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; result = new List&amp;lt;String&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;Int32&amp;gt; separators = new List&amp;lt;Int32&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;separators.Add(-1);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Boolean inQuotes = false;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 counter = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (Char c in content)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (c == separatorChar)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (!inQuotes)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;separators.Add(counter);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (c == '"')&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;inQuotes = !inQuotes;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;counter ++;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;separators.Add(content.Length);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// We now have a list of every separator location.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// Now we can divide the string&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int i = 1; i &amp;lt; separators.Count; i++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result.Add(content.Substring(separators[i - 1] + 1, separators[i] - separators[i - 1] - 1));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int i = 0; i &amp;lt; result.Count; i++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String element = result[i];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 length = element.Length;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Boolean changed = false;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// if it's surrounded with quotes remove those&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (element.Length &amp;gt;= 2 &amp;amp;&amp;amp; element.Substring(0, 1) == @"""" &amp;amp;&amp;amp; element.Substring(length - 1, 1) == @"""")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;element = element.Substring(1, length - 2);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;changed = true;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (element.Contains(@""""""))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;element = element.Replace(@"""""", @"""");&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;changed = true;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// if quotes are encoded as "" then change to a single "&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (changed)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result[i] = element;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static List&amp;lt;TypeStruct&amp;gt; DetermineListTypes(List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// assume that you pass in the data and not the column names&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;TypeStruct&amp;gt; result = new List&amp;lt;TypeStruct&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 rows = content.Count;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 cols = content[0].Count;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;TypeFinder&amp;gt; validTypes = new List&amp;lt;TypeFinder&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int co = 0; co &amp;lt; cols; co++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;validTypes.Add(new TypeFinder());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int ro = 0; ro &amp;lt; rows; ro++) // for every row in data&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; currentRow = content[ro];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (!currentRow.Count.Equals(cols))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;throw new InvalidDataException("inconsistent number of rows");&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int co = 0; co &amp;lt; cols; co++) //&amp;nbsp; for every column in data (column 0 is headers)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String cellContents = currentRow[co];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// Console.WriteLine("Working on item: " + cellContents);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;TypeFinder tf = validTypes[co];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int t = 0; t &amp;lt; tf.typeList.Count; t++) // for every data type&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;TypeStruct ts = tf.typeList[t];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (ts.couldBe) // if that data types hasn't yet been excluded&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// Console.Write("Testing TypeStruct: " + ts.ToString() + " ... ");&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (!ts.regexTest.IsMatch(cellContents)) // check the contents against all the data types not yet excluded&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ts.couldBe = false; // if it couldn't be that then exclude that type&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// Console.WriteLine("False");&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// Console.WriteLine("True");&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int co = 0; co &amp;lt; cols; co++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result.Add(validTypes[co].GetDataType());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// I now have a list of TypeStruct, 1 per column, that contain all of the data types that the columm could be.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static List&amp;lt;ColumnType&amp;gt; DetermineColumnTypes(List&amp;lt;String&amp;gt; columns, List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; columnTypes = new List&amp;lt;ColumnType&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;TypeStruct&amp;gt; listTypes = DetermineListTypes(content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int i = 0; i &amp;lt; columns.Count; i++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columnTypes.Add(new ColumnType(columns[i], listTypes[i]));&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return columnTypes;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static List&amp;lt;ColumnType&amp;gt; DetermineColumnTypes(List&amp;lt;String&amp;gt; columns, List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content, List&amp;lt;ColumnType&amp;gt; hints)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; columnTypes = new List&amp;lt;ColumnType&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; hintColumns = hints.Select(x =&amp;gt; x.colName).ToList();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// if hints already has all the info then we don't need to parse the data&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (columns.OrderBy(x =&amp;gt; x).SequenceEqual(hints.Select(x =&amp;gt; x.colName).OrderBy(x =&amp;gt; x)))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int i = 0; i &amp;lt; columns.Count; i++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (hintColumns.Contains(columns[i]))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columnTypes.Add(hints.Where(x =&amp;gt; x.colName == columns[i]).First());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return columnTypes;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// otherwise we need to parse the data&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;TypeStruct&amp;gt; listTypes = DetermineListTypes(content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int i = 0; i &amp;lt; columns.Count; i++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (hintColumns.Contains(columns[i]))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columnTypes.Add(hints.Where(x =&amp;gt; x.colName == columns[i]).First());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columnTypes.Add(new ColumnType(columns[i], listTypes[i]));&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return columnTypes;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static List&amp;lt;ColumnType&amp;gt; GiveStringColumnTypes(List&amp;lt;String&amp;gt; columns, List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; columnTypes = new List&amp;lt;ColumnType&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;TypeStruct stringTypeStruct = new TypeStruct(BluePrism.AutomateProcessCore.DataType.text, typeof(String), "^.*$", 99);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int i = 0; i &amp;lt; columns.Count; i++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columnTypes.Add(new ColumnType(columns[i], stringTypeStruct));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return columnTypes;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static List&amp;lt;ColumnType&amp;gt; GiveStringColumnTypes(List&amp;lt;String&amp;gt; columns, List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content, List&amp;lt;ColumnType&amp;gt; hints)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; columnTypes = new List&amp;lt;ColumnType&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; hintColumns = hints.Select(x =&amp;gt; x.colName).ToList();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;TypeStruct stringTypeStruct = new TypeStruct(BluePrism.AutomateProcessCore.DataType.text, typeof(String), "^.*$", 99);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// if hints already has all the info then we don't need to parse the data&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (columns.OrderBy(x =&amp;gt; x).SequenceEqual(hints.Select(x =&amp;gt; x.colName).OrderBy(x =&amp;gt; x)))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int i = 0; i &amp;lt; columns.Count; i++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (hintColumns.Contains(columns[i]))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columnTypes.Add(hints.Where(x =&amp;gt; x.colName == columns[i]).First());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return columnTypes;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// otherwise we need to parse the data&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int i = 0; i &amp;lt; columns.Count; i++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (hintColumns.Contains(columns[i]))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columnTypes.Add(hints.Where(x =&amp;gt; x.colName == columns[i]).First());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columnTypes.Add(new ColumnType(columns[i], stringTypeStruct));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return columnTypes;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static Object ParseString(Type targetType, String content, String formatHelper)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (targetType == typeof(String))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return content;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (targetType == typeof(Decimal))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return Convert.ToDecimal(content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (targetType == typeof(Boolean))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return Convert.ToBoolean(content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (targetType == typeof(DateTime))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (formatHelper != "")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return DateTime.ParseExact(content, formatHelper, System.Globalization.CultureInfo.CurrentCulture);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return DateTime.Parse(content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;throw new Exception();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static System.Data.DataTable ParseFormats(List&amp;lt;ColumnType&amp;gt; columns, List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; rowCells;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataTable result = new DataTable();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int co = 0; co &amp;lt; columns.Count; co++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataColumn c = new DataColumn(columns[co].colName, columns[co].csType);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;c.ExtendedProperties.Add("bptype", columns[co].bptype);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result.Columns.Add(c);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int ro = 0; ro &amp;lt; content.Count; ro++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells = content[ro];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataRow newRow = result.NewRow();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 minColumns = System.Math.Min(rowCells.Count, columns.Count);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int co = 0; co &amp;lt; minColumns; co++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;ColumnType ct = columns[co];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;newRow[ct.colName] = ParseString(ct.csType, rowCells[co], ct.formatString);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result.Rows.Add(newRow);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static System.Data.DataTable ParseFormats(List&amp;lt;String&amp;gt; columns, List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content, List&amp;lt;TypeStruct&amp;gt; typeList)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; rowCells;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataTable result = new DataTable();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int co = 0; co &amp;lt; columns.Count; co++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataColumn c = new DataColumn(columns[co], typeList[co].csType);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;c.ExtendedProperties.Add("bptype", typeList[co].bptype);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result.Columns.Add(c);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int ro = 0; ro &amp;lt; content.Count; ro++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells = content[ro];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataRow newRow = result.NewRow();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 minColumns = System.Math.Min(rowCells.Count, columns.Count);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int co = 0; co &amp;lt; minColumns; co++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;TypeStruct ts = typeList[co];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;newRow[columns[co]] = ParseString(ts.csType, rowCells[co], ts.formatString);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result.Rows.Add(newRow);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static void StreamToColumnsAndContent(StreamReader stream, out List&amp;lt;String&amp;gt; columns, out List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content = new List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; line;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String rawLine;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;while ((rawLine = stream.ReadLine()) != null)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;line = SplitLine(rawLine);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// Console.WriteLine("Cols in row: " + line.Count);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content.Add(line);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (content.Count == 0)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columns = new List&amp;lt;String&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content = new List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columns = content[0];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content.RemoveAt(0);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static void StreamToColumnsAndContent(StreamReader stream, Boolean hasHeaders, Decimal skipRows, out List&amp;lt;String&amp;gt; columns, out List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content = new List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; line;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String rawLine;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 skippedRows = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;while ((rawLine = stream.ReadLine()) != null)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (skipRows &amp;gt; skippedRows)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;skippedRows ++;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;continue;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;line = SplitLine(rawLine);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// Console.WriteLine("Cols in row: " + line.Count);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content.Add(line);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (content.Count == 0)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columns = new List&amp;lt;String&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// content = new List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (hasHeaders)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columns = content[0];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content.RemoveAt(0);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columns = new List&amp;lt;String&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 counter = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (String column in content[0])&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;counter ++;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columns.Add(NumberToLetters(counter));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static void StreamToColumnsAndContent(StreamReader stream, Boolean hasHeaders, Decimal skipRows, Decimal columnCount, out List&amp;lt;String&amp;gt; columns, out List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content = new List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; line;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String rawLine;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 skippedRows = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;while ((rawLine = stream.ReadLine()) != null)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (skipRows &amp;gt; skippedRows)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;skippedRows ++;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;continue;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;line = SplitLine(rawLine);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// Console.WriteLine("Cols in row: " + line.Count);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content.Add(line);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (content.Count == 0)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columns = new List&amp;lt;String&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// content = new List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (hasHeaders)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columns = content[0];&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content.RemoveAt(0);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columns = new List&amp;lt;String&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (int i = 1; i &amp;lt;= Convert.ToInt32(columnCount); i++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;columns.Add(NumberToLetters(i));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static DataTable StreamToTypedDataTable(StreamReader stream)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; columns;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataTable result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;StreamToColumnsAndContent(stream, out columns, out content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; colTypes = DetermineColumnTypes(columns, content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result = ParseFormats(colTypes, content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static DataTable StreamToTypedDataTable(StreamReader stream, List&amp;lt;ColumnType&amp;gt; hints)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; columns;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataTable result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;StreamToColumnsAndContent(stream, out columns, out content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; colTypes = DetermineColumnTypes(columns, content, hints);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result = ParseFormats(colTypes, content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static DataTable StreamToStringDataTable(StreamReader stream)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; columns;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataTable result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;StreamToColumnsAndContent(stream, out columns, out content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; colTypes = GiveStringColumnTypes(columns, content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result = ParseFormats(colTypes, content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static DataTable StreamToStringDataTable(StreamReader stream, List&amp;lt;ColumnType&amp;gt; hints)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; columns;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataTable result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;StreamToColumnsAndContent(stream, out columns, out content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; colTypes = GiveStringColumnTypes(columns, content, hints);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result = ParseFormats(colTypes, content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static DataTable StreamToStringDataTable(StreamReader stream, List&amp;lt;ColumnType&amp;gt; hints, Boolean hasHeaders, Decimal skipRows)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; columns;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataTable result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;StreamToColumnsAndContent(stream, hasHeaders, skipRows, out columns, out content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; colTypes = GiveStringColumnTypes(columns, content, hints);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result = ParseFormats(colTypes, content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static DataTable StreamToStringDataTable(StreamReader stream, List&amp;lt;ColumnType&amp;gt; hints, Boolean hasHeaders, Decimal skipRows, Decimal columnCount)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;List&amp;lt;String&amp;gt;&amp;gt; content;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; columns;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataTable result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;StreamToColumnsAndContent(stream, hasHeaders, skipRows, columnCount, out columns, out content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; colTypes = GiveStringColumnTypes(columns, content, hints);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result = ParseFormats(colTypes, content);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static List&amp;lt;ColumnType&amp;gt; HintsToColumnTypeList(DataTable hints)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// hint should contain&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// Column Name&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// Data Type&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// Format Code&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// in that order, all text&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; result = new List&amp;lt;ColumnType&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (DataRow row in hints.Rows)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String name = Convert.ToString(row[0]);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String bptype = Convert.ToString(row[1]);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String format = "";&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (hints.Columns.Count &amp;gt; 2)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;format = Convert.ToString(row[2]);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;result.Add(new ColumnType(name, bptype, format));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return result;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static DataTable FileAndHintsToTypedTable(String filename, DataTable hints)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; hintList = HintsToColumnTypeList(hints);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (StreamReader sr = new StreamReader(filename))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return StreamToTypedDataTable(sr, hintList);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static DataTable FileAndHintsToStringTable(String filename, DataTable hints)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; hintList = HintsToColumnTypeList(hints);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (StreamReader sr = new StreamReader(filename))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return StreamToStringDataTable(sr, hintList);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static DataTable FileAndHintsToTypedTableV2(String filename, DataTable hints)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; hintList = HintsToColumnTypeList(hints);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (StreamReader sr = new StreamReader(fs))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return StreamToTypedDataTable(sr, hintList);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static DataTable FileAndHintsToStringTableV2(String filename, DataTable hints)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; hintList = HintsToColumnTypeList(hints);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (StreamReader sr = new StreamReader(fs))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return StreamToStringDataTable(sr, hintList);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static DataTable FileAndHintsAndOptionsToStringTable(String filename, DataTable hints, Boolean hasHeaders, Decimal skipRows)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; hintList = HintsToColumnTypeList(hints);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (StreamReader sr = new StreamReader(fs))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return StreamToStringDataTable(sr, hintList, hasHeaders, skipRows);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static DataTable FileAndHintsAndOptionsToStringTable(String filename, DataTable hints, Boolean hasHeaders, Decimal skipRows, Decimal columnCount)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;ColumnType&amp;gt; hintList = HintsToColumnTypeList(hints);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (StreamReader sr = new StreamReader(fs))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return StreamToStringDataTable(sr, hintList, hasHeaders, skipRows, columnCount);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;/*&lt;/DIV&gt;&lt;DIV&gt;================================================================================&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#&amp;nbsp; &amp;nbsp; &amp;nbsp;# ######&amp;nbsp; ### ####### ### #&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; #####&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#&amp;nbsp; #&amp;nbsp; # #&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; #&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; ##&amp;nbsp; &amp;nbsp; # #&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#&amp;nbsp; #&amp;nbsp; # #&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; #&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; # #&amp;nbsp; &amp;nbsp;# #&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#&amp;nbsp; #&amp;nbsp; # ######&amp;nbsp; &amp;nbsp;#&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; #&amp;nbsp; #&amp;nbsp; # #&amp;nbsp; ####&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#&amp;nbsp; #&amp;nbsp; # #&amp;nbsp; &amp;nbsp;#&amp;nbsp; &amp;nbsp; #&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; #&amp;nbsp; &amp;nbsp;# # #&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;#&amp;nbsp; #&amp;nbsp; # #&amp;nbsp; &amp;nbsp; #&amp;nbsp; &amp;nbsp;#&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; #&amp;nbsp; &amp;nbsp; ## #&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;## ##&amp;nbsp; #&amp;nbsp; &amp;nbsp; &amp;nbsp;# ###&amp;nbsp; &amp;nbsp; #&amp;nbsp; &amp;nbsp; ### #&amp;nbsp; &amp;nbsp; &amp;nbsp;#&amp;nbsp; #####&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;================================================================================&lt;/DIV&gt;&lt;DIV&gt;*/&lt;/DIV&gt;&lt;DIV&gt;static String EncodeColumnName(String input, String separator)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String content = input;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (content.Contains(@""""))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content = content.Replace(@"""", @"""""");&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (content.Contains(@"""") | content.Contains(separator))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content = @"""" + content + @"""";&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return content;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static String EncodeText(String input)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return @"""" + input.Replace(@"""", @"""""") + @"""";&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static String EncodeText(String input, String separator)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String content = input;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (content.Contains(@""""))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content = content.Replace(@"""", @"""""");&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (content.Contains(@"""") | content.Contains(separator))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content = @"""" + content + @"""";&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return content;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static List&amp;lt;String&amp;gt; DataTableToStringList(DataTable table, String separator)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; content = new List&amp;lt;String&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; rowCells = new List&amp;lt;String&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String bptype;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (DataColumn col in table.Columns)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells.Add(EncodeColumnName(col.ColumnName, separator));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content.Add(String.Join(separator, rowCells));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (DataRow row in table.Rows)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells = new List&amp;lt;String&amp;gt;();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (DataColumn col in table.Columns)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (col.ExtendedProperties.Contains("bptype"))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;bptype = col.ExtendedProperties["bptype"].ToString();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (bptype == "text")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells.Add(EncodeText(row[col].ToString(), separator));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (bptype == "date")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells.Add(Convert.ToDateTime(row[col]).ToString("yyyy-MM-dd"));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (bptype == "datetime")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells.Add(Convert.ToDateTime(row[col]).ToString("yyyy-MM-dd hh:mm:ss tt"));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (bptype == "time")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells.Add(Convert.ToDateTime(row[col]).ToString("hh:mm:ss tt"));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells.Add(row[col].ToString());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (col.DataType == typeof(String))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells.Add(EncodeText(row[col].ToString()));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (col.DataType == typeof(Decimal))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells.Add(row[col].ToString());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (col.DataType == typeof(DateTime))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells.Add(Convert.ToDateTime(row[col]).ToString("yyyy-MM-dd hh:mm:ss tt"));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;rowCells.Add(row[col].ToString());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;content.Add(String.Join(separator, rowCells));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;return content;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static void DataTableToStream(DataTable input, StreamWriter sw, String separator)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;List&amp;lt;String&amp;gt; content = DataTableToStringList(input, separator);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 lines = content.Count;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;for (Int32 i = 0; i &amp;lt; lines; i++)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (i &amp;lt; lines - 1)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.WriteLine(content[i]);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.Write(content[i]);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;static void DataTableToFile(DataTable input, String filename, Decimal BPVersionMajor)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataTable content = FixTimeIssue(input, BPVersionMajor);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (StreamWriter sw = new StreamWriter(filename))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;DataTableToStream(content, sw, ",");&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static void DataTableToFileChunk(DataTable input, String filename, Decimal BPVersionMajor)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; // Fix time issues in the input collection&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; DataTable content = FixTimeIssue(input, BPVersionMajor);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; // Define the chunk size&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; int chunkSize = 50000;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; // Get the total number of rows in the DataTable&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; int totalRows = content.Rows.Count;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; // Open the StreamWriter for writing to the file&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; using (StreamWriter sw = new StreamWriter(filename))&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Write the column headers to the file&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string[] columnNames = new string[content.Columns.Count];&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = 0; i &amp;lt; content.Columns.Count; i++)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; columnNames[i] = content.Columns[i].ColumnName;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sw.WriteLine(string.Join(",", columnNames)); // Write headers as the first row&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Process the DataTable in chunks&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int startRow = 0; startRow &amp;lt; totalRows; startRow += chunkSize)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Get the current chunk of rows&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; int endRow = Math.Min(startRow + chunkSize, totalRows);&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int i = startRow; i &amp;lt; endRow; i++)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Write each row to the file&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string[] rowValues = new string[content.Columns.Count];&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for (int j = 0; j &amp;lt; content.Columns.Count; j++)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; // Handle null values and format data to avoid breaking the CSV structure&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (content.Rows[i][j] != null)&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rowValues[j] = content.Rows[i][j].ToString()&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Replace("\n", "")&amp;nbsp; // Remove newline&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; .Replace("\r", ""); // Remove carriage return&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rowValues[j] = string.Empty;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sw.WriteLine(string.Join(",", rowValues));&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp; &amp;nbsp; }&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;static void DataTableToFileUnsafe(DataTable input, String filename)&lt;/DIV&gt;&lt;DIV&gt;{&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;System.GC.Collect(2, System.GCCollectionMode.Forced, true);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Int32 writerCounter = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;Boolean first;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;String colType;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;using (StreamWriter sw = new StreamWriter(filename))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// write columns&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;first = true;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (DataColumn c in input.Columns)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (first)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;first = false;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.Write(",");&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.Write(c.ColumnName);&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.WriteLine();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;// write data&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (DataRow r in input.Rows)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;first = true;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;foreach (DataColumn c in input.Columns)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (first)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;first = false;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.Write(",");&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (c.ExtendedProperties.Contains("bptype"))&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;colType = c.ExtendedProperties["bptype"].ToString();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;colType = "unknown";&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (colType == "text")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.Write(EncodeText((String) r[c]));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (colType == "password")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.Write(EncodeText((String) r[c]));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (colType == "number")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.Write(((Decimal) r[c]).ToString());&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (colType == "date")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.Write(((DateTime) r[c]).ToString("yyyy-MM-dd"));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (colType == "time")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.Write(((DateTime) r[c]).ToString("hh:mm:ss tt"));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else if (colType == "datetime")&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.Write(((DateTime) r[c]).ToString("yyyy-MM-dd hh:mm:ss tt"));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;else // unknown&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.Write(EncodeText(Convert.ToString(r[c])));&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;sw.WriteLine();&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;writerCounter ++;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;if (writerCounter &amp;gt; 10000)&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;System.GC.Collect(2, System.GCCollectionMode.Forced, true);&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;writerCounter = 0;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;SPAN&gt;System.GC.Collect(2, System.GCCollectionMode.Forced, true);&amp;nbsp;&lt;/SPAN&gt;&lt;/DIV&gt;&lt;DIV&gt;}&lt;/DIV&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 11 Dec 2025 16:36:50 GMT</pubDate>
      <guid>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123948#M11</guid>
      <dc:creator>TrevorMclellan21</dc:creator>
      <dc:date>2025-12-11T16:36:50Z</dc:date>
    </item>
    <item>
      <title>Re: Upgrade from 6.5 to 7.3    BluePrism.AutomateProcessCore.dll not having the DataType function</title>
      <link>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123949#M12</link>
      <description>&lt;P&gt;I think it would be worth having a developer redesign this to try using one of the standard objects in order to read a CSV. It may be necessary to do it like this, but I wonder if it is still necessary or not. That is a lot of code to do something that we usually don't need special logic for. Of course I'm just making a guess here without any real context.&lt;/P&gt;&lt;P&gt;If you are for sure trying to keep all that code, I would imagine you can fix it quite quickly and easily using Cursor or GitHub Copilot. The AI agents designed for writing code are specifically really good at fixing code when they have a reference. In this case, you'd have a project where you drop that code in and then add references to the various Blue Prism DLL files, and then ask the LLM to figure out what should be changed based on the available classes and functions in the new DLL files.&lt;BR /&gt;&lt;BR /&gt;Is this something you or someone on your team is comfortable trying to do?&lt;/P&gt;</description>
      <pubDate>Thu, 11 Dec 2025 17:47:38 GMT</pubDate>
      <guid>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/123949#M12</guid>
      <dc:creator>david.l.morris</dc:creator>
      <dc:date>2025-12-11T17:47:38Z</dc:date>
    </item>
    <item>
      <title>Re: Upgrade from 6.5 to 7.3    BluePrism.AutomateProcessCore.dll not having the DataType function</title>
      <link>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/124008#M13</link>
      <description>&lt;P&gt;Just thought i would reply with what i have found for a solution. It looks like the enum that was in&amp;nbsp;&lt;SPAN&gt;BluePrism.AutomateProcessCore.DataType has now moved to&amp;nbsp;BluePrism.Core.StageExecutions.DataType. After replacing all the references I have 0 errors and everything seems to be working well! Big shoutout to Dave Morris for pointing me in the right direction!&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 15 Dec 2025 14:09:14 GMT</pubDate>
      <guid>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/124008#M13</guid>
      <dc:creator>TrevorMclellan21</dc:creator>
      <dc:date>2025-12-15T14:09:14Z</dc:date>
    </item>
    <item>
      <title>Re: Upgrade from 6.5 to 7.3    BluePrism.AutomateProcessCore.dll not having the DataType function</title>
      <link>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/124009#M14</link>
      <description>&lt;P&gt;Great work &lt;a href="https://community.blueprism.com/t5/user/viewprofilepage/user-id/65308"&gt;@TrevorMclellan21&lt;/a&gt;, must be a relief and just in time for xmas. And thanks again&amp;nbsp;&lt;a href="https://community.blueprism.com/t5/user/viewprofilepage/user-id/2590"&gt;@david.l.morris&lt;/a&gt;&amp;nbsp;- what a champion!&lt;/P&gt;</description>
      <pubDate>Mon, 15 Dec 2025 14:15:45 GMT</pubDate>
      <guid>https://community.blueprism.com/t5/Upgrade-Support/Upgrade-from-6-5-to-7-3-How-to-handle-custom-code-compile-errors/m-p/124009#M14</guid>
      <dc:creator>Michael_S</dc:creator>
      <dc:date>2025-12-15T14:15:45Z</dc:date>
    </item>
  </channel>
</rss>

