Вставьте DataTable в Excel, используя Microsoft Access Database Engine через OleDb

Я наткнулся сегодня на инструкции для чтения данных из файла Microsoft Excel с помощьюOleDbConnection на этом сайте:Поставщики OLE DB

Это позволяет мне читать все данные из файла 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;
    }

Когда я вставляю данные, Шаг 1 заключается в удалении существующей таблицы в базе данных Microsoft Access в случае добавления, изменения или удаления столбцов:

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

ПослеDROP TABLE команда выполнена (вCODE NEEDED HERE раздел), мне нужно как-то вставить информацию вDataTable.

Как мне вставить таблицу, если у меня нет какого-либо типа первичного ключа, имен столбцов или типов данных столбцов?

OleDbParameter имеетAddWithValue метод, который позволяет добавлять данные без необходимости знать тип данных.Is there something similar that I could use to dump in the entire DataTable (or DataSet)?

Ответы на вопрос(1)

Ваш ответ на вопрос