你好,游客 登录 注册 搜索
背景:
阅读新闻

与Excel有关的CRUD -

[日期:2013-04-04] 来源:  作者: [字体: ]

市面上的数据库有各种各样,微软旗下就有Microsoft SQL Server与Access两款知名的产品。而与Access同为Office品牌下的Excel其实也有着部分的数据库功能。所以某些对数据库的操作,也是可以在其上使用的。

在ADO.NET中就可以把Excel当作是一种数据源。

首先是连接数据库,即Excel文件。

string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=file.xlsx;
Extended Properties="Excel 12.0;HDR=YES";" //.xlsx格式的Excel
//string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=file.xlsx;
//Extended Properties="Excel 8.0;HDR=YES";" .xls格式的Excel 97-2003

OleDbConnection connection = new OleDbConnection(connectionString);
connection.Open();

这里可能会有一个问题。如果使用的是最新的Excel 2013,无论是使用“Microsoft.ACE.OLEDB.12.0”,还是“Microsoft.ACE.OLEDB.15.0”,始终会报Microsoft.ACE.OLEDB未注册的错误。在网上找到的答案比较令人失望,Microsoft.ACE.OLEDB.12.0 provider for access not registered。因为里面提到一句“There is only one version of ACE OLEDB and that is Microsoft.ACE.OLEDB.12.0.”,所以尝试重新安装了Microsoft Access Database Engine 2010 Redistributable,仍是无法解决问题。

Excel 2010可以正常运行以上代码,其之前的版本应该也是没有问题的。

先撇开这个问题,回到更有意义的内容。

我们可以像创建数据表一样在Excel中创建一个工作簿。

CREATE TABLE MySheet (Field1 char(10), Field2 float, Field3 date)

然后使用Insert插入数据。

INSERT INTO [MySheet$] (Field1, Field2, Field3) VALUES ('testdata', 1.234, '09/28/1979');

再取出数据。

SELECT * FROM [MySheet$]

OleDbDataReader足以胜任这项任务。

string commandText = "SELECT * FROM [MySheet$]";
OleDbCommand command = new OleDbCommand(commandText, connection);
OleDbDataReader dr = command.ExecuteReader();

你也可以更新所需的数据。

UPDATE [MySheet$]
    SET Field2 = '2.345',
    Field3 = '10/18/1964'
WHERE
    Field1 = 'testdata'

这里用OleDbDataAdapter对于Insert或Update操作都同样好用。

最后常见的CRUD只剩下Delete了,但是很遗憾,Microsoft Access Database Engine OLE DB provider是不支持在一个Excel文件中执行Delete操作的。强制执行的话只会引发一个错误。

如果一定要进行类似的操作该如何办呢?还有另一个可选但比较复杂的方法,使用COM Interop。这里先不作详述,只留下关键词,Microsoft.Office.Interop.Excel。

原文同步发布于我的个人博客






收藏 推荐 打印 | 录入:admin | 阅读:
相关新闻