Inserir DataTable no Excel usando o mecanismo de banco de dados do Microsoft Access via OleDb

Eu me deparei com instruções hoje para ler dados de um arquivo do Microsoft Excel usando umOleDbConnection neste site:Provedores OLE DB

Isso me permite ler todos os dados de um arquivo do Excel:

private const string EXCEL_CON =
  @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};" +
  @"Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'";

    public DataTable ExtractExcel(string fullFilename, string tableName)
    {
        var table = new DataTable();
        string strCon = string.Format(EXCEL_CON, fullFilename);
        using (var xlConn = new System.Data.OleDb.OleDbConnection(strCon))
        {
            ConnectionState initialState = xlConn.State;
            try
            {
                if ((initialState & ConnectionState.Open) != ConnectionState.Open)
                {
                    xlConn.Open();
                }
                string sql = string.Format("SELECT * FROM `{0}`;", tableName);
                using (var cmd = new System.Data.OleDb.OleDbCommand(sql, xlConn))
                {
                    table.Load(cmd.ExecuteReader());
                }
            }
            finally
            { // it seems like Access does not always close the connection
                if ((initialState & ConnectionState.Open) != ConnectionState.Open)
                {
                    xlConn.Close();
                }
            }
        }
        return table;
    }

Quando insiro dados, o Passo 1 é eliminar a tabela existente no banco de dados do Microsoft Access caso as colunas tenham sido adicionadas, alteradas ou removidas:

public void InsertExcel(OleDbConnection dbConn, DataTable table) {
  ConnectionState initState = dbConn.State;
  try {
    if ((initState & ConnectionState.Open) != ConnectionState.Open) {
      dbConn.Open();
    }
    string sql = string.Format("SELECT * FROM {0};", table.TableName);
    DataTable original = new DataTable();
    using (OleDbCommand cmd = new OleDbCommand(sql, dbConn)) {
      try {
        original.Load(cmd.ExecuteReader());
      } catch (Exception) { // table does not exist
      }
    }
    if (0 < original.Rows.Count) {
      sql = string.Format("DROP TABLE {0};", table.TableName);
      using (OleDbCommand cmd = new OleDbCommand(sql, dbConn)) {
        cmd.ExecuteNonQuery();
      }
    }
    // ****************
    // CODE NEEDED HERE
    // ****************
  } finally {
    if ((initState & ConnectionState.Open) != ConnectionState.Open) {
      dbConn.Close();
    }
  }
}

Depois deDROP TABLE comando é executado (noCODE NEEDED HERE seção), eu preciso de alguma forma inserir as informações noTabela de dados.

Como eu poderia inserir a tabela se não tivesse nenhum tipo de chave primária, nomes de coluna ou tipos de dados de coluna?

oOleDbParameter tem tem oAddWithValue método que permite que os dados sejam adicionados sem ter que conhecer o tipo de dados.Existe algo semelhante que eu poderia usar para despejar em todo oDataTable (ouDataSet)

questionAnswers(1)

yourAnswerToTheQuestion