title: Read Excel to datatable without losing precision for currency type
body: <p>I'm trying to read an Excel sheet data to a datatable for binding to a GridView. My Excel sheet contains data as follows,</p>
  
  <pre><code>ID    Value1                    Value2
  -------------------------------------------------
  1     $312976.97530297          $30790.0614862584
  etc
  </code></pre>
  
  <p>I'm using the following code to read the values to a datatable.</p>
  
  <pre><code>DataTable table = new DataTable();
  string filePath = @"D:\Book1.xlsx";
  string strConn = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;TypeGuessRows=0;ImportMixedTypes=Text\"", filePath);
  using (OleDbConnection dbConnection = new OleDbConnection(strConn)) 
  {
  using (OleDbDataAdapter dbAdapter = new OleDbDataAdapter("SELECT ID, value1,value2  FROM [Sheet1$]", dbConnection))
  dbAdapter.Fill(table);
  }
  </code></pre>
  
  <p>Problem: since value1 and value2 contain $ symbol, dataAdaptor retrieve both the values without full precision, ie. instead of 312976.97530297, its return 312976.9753 only.</p>
  
  <pre><code>Note: 
  1. I cannot change the input Excel sheet since the enduser will upload it to the web site.
  2. If i remove the $ symbol in the excel sheet, it will return the full precision, but $ also present in the input sheet.
  3. I tried using Microsoft.Office.Interop.Excel and its working, but the performance is very low.
  
  
  Or I can format all the excel cell as Text/General type before filling to the datatable, Anyone knows how to do that?
  </code></pre>
  
  <p>Please suggest one method using OleDbDataAdapter.</p>
  
  <p>Thanks in Advance,
  Wilson.</p>