Wstaw DataTable do programu Excel przy użyciu aparatu bazy danych Microsoft Access za pośrednictwem OleDb

Natknąłem się dzisiaj na instrukcje do odczytu danych z pliku Microsoft Excel za pomocąOleDbConnection na tej stronie:Dostawcy DB OLE

Dzięki temu mogę odczytać wszystkie dane z pliku 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;
    }

Gdy wstawiam dane, krok 1 polega na usunięciu istniejącej tabeli z bazy danych Microsoft Access, jeśli kolumny zostały dodane, zmienione lub usunięte:

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();
    }
  }
}

PoDROP TABLE polecenie jest wykonywane (wCODE NEEDED HERE sekcja), muszę jakoś wstawić informacje doTabela danych.

Jak wstawiłbym tabelę, jeśli nie mam żadnego rodzaju klucza podstawowego, nazw kolumn lub typów danych kolumn?

TheOleDbParameter maAddWithValue metoda umożliwiająca dodawanie danych bez znajomości typu danych.Czy jest coś podobnego, którego mógłbym użyć do zrzucenia całegoDataTable (lubDataSet)?

questionAnswers(1)

yourAnswerToTheQuestion