Вставьте 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
)?