我今天遇到了使用此网站上的OleDbConnection
从Microsoft Excel文件中读取数据的说明:OLE DB Providers
这允许我读取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方法,允许在不必知道数据类型的情况下添加数据。 是否有类似的东西我可以用来转储整个DataTable
(或DataSet
)?
答案 0 :(得分:13)
这是我通过合并我发现或开发的各种代码构建的static class
。您需要注意的主要方法是ExportToExcelOleDb
,给定DataSet
和连接字符串会将DataSet
写入您选择的Excel文件,格式为{{1是的。
请注意,Access Engine写入Excel的方式存在“错误” - 在写入Excel工作簿时无法保留数据类型,这意味着所有数据类型都以Excel {{1}编写} / DataSet
。无论如何它是......
TEXT
我希望这对你有用。
注意。我知道这种类型的答案是不受欢迎的,但我花了一些时间来开发它,最后没有用它 - 转而使用COM / interop。不分享是一种耻辱!