Fügen Sie DataTable mithilfe von Microsoft Access Database Engine über OleDb in Excel ein

Ich bin heute auf Anweisungen zum Lesen von Daten aus einer Microsoft Excel-Datei mit einem gestoßenOleDbConnection auf dieser website:OLE DB-Anbieter

Dadurch kann ich alle Daten aus einer Excel-Datei einlesen:

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

Beim Einfügen von Daten wird in Schritt 1 die vorhandene Tabelle in der Microsoft Access-Datenbank weggeblasen, falls Spalten hinzugefügt, geändert oder entfernt wurden:

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

Nach demDROP TABLE Befehl wird ausgeführt (imCODE NEEDED HERE abschnitt) muss ich irgendwie die informationen in die einfügenDatentabelle.

Wie füge ich die Tabelle ein, wenn ich keinen Primärschlüssel, Spaltennamen oder Spaltendatentyp habe?

DasOleDbParameter hat hat dieAddWithValue Methode, mit der Daten hinzugefügt werden können, ohne dass der Datentyp bekannt sein muss.Gibt es etwas Ähnliches, das ich verwenden könnte, um das Ganze zu entsorgen?DataTable (oderDataSet)?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage