title: The given value of type DateTime from the data source cannot be converted to type decimal of the spe
body: <p>I am trying to migrate data from Oracle to SQL. </p>
  
  <p>I already created Table name and field Name. </p>
  
  <p>Type and Size are same on both: e.g. </p>
  
  <ul>
  <li>at Oracle <code>Varchar2(11)</code>, On SQL <code>VARCHAR(11)</code></li>
  <li>at Oracle <code>Date</code>, On SQL <code>datetime2(0)</code>. </li>
  </ul>
  
  <p>In my application I'm using <code>SqlBulkCopy</code> function. But I face the above error on Date filed. </p>
  
  <pre><code>  private void Processing(string sPath)
      {
          string AppPath = Application.StartupPath.ToString();
          IniFile myIni = new IniFile(sPath);
  
          string allTable = myIni.IniReadValue("TABLENAME", "TABLE");
          string[] alltables = allTable.Split(',');
  
          foreach (var tableName in alltables)
          {
              string whereSqlQuery = string.Empty;
              string sOrderBySqlQuery = string.Empty;
              string sSQLSelect = string.Empty;
              string sRCount = string.Empty;
  
              whereSqlQuery = myIni.IniReadValue(tableName, "WHERE");
              TableName = tableName;
              sOrderBySqlQuery = myIni.IniReadValue(tableName, "ORDERBY");
  
              sSQLSelect = myIni.IniReadValue(tableName, "SQLSELECT");
              //sRCount = myIni.IniReadValue(tableName, "RCOUNT");
  
              if (radAuto.Checked == true)
                  ConnectAndQuery(tableName, whereSqlQuery, sOrderBySqlQuery, sSQLSelect, sRCount);
              else
                  ConnectAndQuery(tableName, whereSqlQuery, sOrderBySqlQuery);
          }
      }
  private void ConnectAndQuery(string strTableName, string strWhere, string strOrderBy, string sSqlSelect, string sRcount)
          {
              Cursor.Current = Cursors.WaitCursor;
              string connectionString = GetConnectionString();
              // Using 
              OracleConnection connection = new OracleConnection();
              SqlConnection oConn = default(SqlConnection);            
              DataTable dtSQL = null;            
              DateTime dtLog = DateTime.Now;
              try
              {
                  //Opening Oracle DB Connection
                  connection.ConnectionString = connectionString;
                  connection.Open();
              ShownLog(string.Format("Table = {0} ,  -- STARTING --", strTableName));
              ShownLog("Oracle Connection Opened, OK");
              OracleCommand command = connection.CreateCommand();
              if (!string.IsNullOrEmpty(strWhere))
                  SqlQuery = "SELECT * FROM " + strTableName + " WHERE "+ strWhere;
              else
                  SqlQuery = string.Format("SELECT * FROM {0} ", strTableName);
  
              if (!string.IsNullOrEmpty(strOrderBy))
                  SqlQuery += " ORDER BY " + strOrderBy;
  
  
              command.CommandText = SqlQuery;
              System.DateTime startTime = System.DateTime.Now;
              ShownLog("Starting Date Time : " + startTime);                
              DataTable dtTotalInsertCount = new DataTable(strTableName);
  
              if (!string.IsNullOrEmpty(sRcount))
              {
                  //OracleDataAdapter adpCount = new OracleDataAdapter(sRcount, connectionString);                    
                  ////adpCount.FillSchema(dtTotalInsertCount, SchemaType.Source);
                  //adpCount.Fill(dtTotalInsertCount);
              }
              OracleDataAdapter adapter = new OracleDataAdapter(SqlQuery, connectionString);
              DataTable dt = new DataTable(strTableName);                
              adapter.FillSchema(dt, SchemaType.Source);
  
              bool valid = true;
              bool bCheck = true;
              int count = 1000;
              int start = 0;
  
              string sLogQuery = SqlQuery.Replace("'", "");
              dtLog = DateTime.Now;
              //Insert to SQL Log Table
              Insert(strTableName, dtLog, sLogQuery);
  
              int iLogCount = 0;
              int iActualCount = 0;
              do
              {
                  int iEnd = 0;                    
                  adapter.Fill(start, count, dt);
                  valid = dt.Rows.Count &gt; 0 ? true : false;
  
                  if (valid)
                  {
                      iLogCount += dt.Rows.Count;
                      iEnd = start + dt.Rows.Count;
                      ShownLog("No of data Rows retrieved from Oracle, Count = " + dt.Rows.Count);                        
  
                      //Create the SQL Server Table 
                      oConn = new SqlConnection(txtDestinationConnString.Text);
                      oConn.Open();
  
                      ShownLog("SQL Connection Opened, OK");
  
                      if (string.IsNullOrEmpty(sSqlSelect))
                          bCheck = false;
                      if (bCheck)
                      {
                          ShownLog("Data Comparision Start : " + System.DateTime.Now);                            
                          //If SQL Select Statement has
                          if (!string.IsNullOrEmpty(sSqlSelect))
                          {
                              SqlCommand cmd = new SqlCommand();
                              cmd.CommandText = sSqlSelect;
                              cmd.Connection = oConn;
                              cmd.CommandType = CommandType.Text;
                              SqlDataReader reader = cmd.ExecuteReader();
                              dtSQL = new DataTable();
                              dtSQL.Load(reader);
                              cmd = null;
                              reader = null;
  
                              //Return record has more than 0
                              ShownLog("Start Duplicate Checking : " + System.DateTime.Now);                                
                              if (dtSQL.Rows.Count &gt; 0)
                              {
                                  foreach (DataRow dr in dtSQL.Rows)
                                  {
                                      DataRow[] result;
                                      if (strTableName == "ITK_STAFF" || strTableName == "ITK_FLIGHT")
                                      {
                                          result = dt.Select("URNO='" + dr[0].ToString() + "'");                                            
                                      }
                                      else
                                          result = dt.Select("URNO=" + dr[0]);
  
                                      if (result.Length &gt; 0)
                                      {
                                          foreach (var drRemove in result)
                                          {
                                              dt.Rows.Remove(drRemove);
                                          }
                                      }
                                  }
                              }
                              ShownLog("End Duplicate Checking : " + System.DateTime.Now);                                
                          }
                          ShownLog("Actual No.s of records to insert : " + dt.Rows.Count);                            
                          if (dt.Rows.Count == count)
                              bCheck = false;
                          ShownLog("Data Comparision End : " + System.DateTime.Now);                            
                      }
  
                      if (valid)
                      {
                          ShownLog(System.DateTime.Now + " Copying " + strTableName + " From : " + start.ToString() + " To : " + iEnd);                            
                      }
  
                      start += count;
                      if (dt.Rows.Count &gt; 0)
                      {
                          iActualCount += dt.Rows.Count;
                          CopyData(dt, oConn);
                          dt.Rows.Clear();
                      }
  
                      oConn.Close();
                      oConn = null;
                  }
              } while (valid);
  
              System.DateTime endTime = System.DateTime.Now;
              ShownLog("Ending  DateTime: " + endTime);
              //msgOut("No of rows copied from oracle to SQL Server , Count = " + dt.Rows.Count);
  
              TimeSpan diffTime = endTime.Subtract(startTime);
              ShownLog(String.Format("Time Difference is  Days : {0},  Hours : {1},  Minites : {2}, seconds : {3} ,Milliseconds : {4}", diffTime.Days, diffTime.Hours, diffTime.Minutes, diffTime.Seconds, diffTime.Milliseconds));
  
              ShownLog(string.Format("Table = {0} ,  -- FINISHED --", strTableName));
  
              ShownLog(string.Empty);                             
  
              Update(iLogCount, iActualCount, strTableName, dtLog, sLogQuery, " ", true);
  
              Cursor.Current = Cursors.Default;
          }
          catch (Exception ex)
          {
              Cursor.Current = Cursors.Default;
              ShownLog(ex.ToString());
              ShownLog(string.Empty);
              Update(0, 0, strTableName, dtLog, "", ex.ToString(), false);
              ((IDisposable)connection).Dispose();
              if (oConn != null)
                  oConn.Close();
              RadioButtonControl();
          }
          finally
          {
              Cursor.Current = Cursors.Default;
              ((IDisposable)connection).Dispose();
              if (oConn != null)
                  oConn.Close();
  
              RadioButtonControl();
          }
      }
  
  private void CopyData(DataTable sourceTable, SqlConnection destConnection)
      {
          // Using 
          SqlBulkCopy s = new SqlBulkCopy(destConnection);
          try
          {
              s.DestinationTableName = TableName;
              s.NotifyAfter = 10000;
              s.SqlRowsCopied += new SqlRowsCopiedEventHandler(s_SqlRowsCopied);
  
              s.WriteToServer(sourceTable);
              s.Close();
          }
          finally
          {
              ((IDisposable)s).Dispose();
          }
      }
  </code></pre>