一、 名词解释:
它如同普通SQL数据库一样的操作。下面先简单的介绍一下SQL数据库记录操作的语句。 数据类型:与传统的数据库不同,在 Excel 表中没有指定列的数据类型的直接方式。而是通过OLE DB 提供程序的程序,对一列中的八行进行扫描来猜测该字段的数据类型。您可以通过为连接字符串的扩展属性中的 MAXSCANROWS 设置指定一个一 (1) 至十六 (16) 之间的值,来更改要扫描的行数。 查询 select * from [表名$] (1)使用带有定义名称的区域(例如 [MyNamedRange]) Select * from [MyNamedRange] (2)使用带有特定地址的区域(例如 [Sheet1$A1:B10]): Select * from [Sheet1$A1:B10] 注意:工作表名称后面带美元符号表示该表存在。如果您要创建一个新表,如本文 创建新工作簿和表 一节中所讨论的那样,请不要使用美元符号。 //示例 OleDB方式的查询语句 string selectString = "select * from [Sheet2$]"; //SQL方式 string selectString = "SELECT * FROM table1 WHERE 日期>=#" + this.dmBegin.ToString() + "# and 日期<=#" + this.dmEnd.ToString() + "#"; string strSearch = " SELECT * FROM table1 WHERE 日期LIKE '%" + dm.ToString() + "%' OR 地点 LIKE '%" + this.textBox1.Text + "'";
插入 insert into [表名$] values ('值1’,’值2’,) // 示例OleDB方式 string instertString = "insert into [Sheet2$](ID,X,Y,Z) values(" + OID + "," + x + "," + y + "," + z + ")"; //SQL方式 string strInst = "INSERT INTO table1(ColumnName1, ColumnName2, ColumnName3,…) VALUES (' " + this.textBox1.Text + " ',' " + this.textBox2.Text + " ',' " + this.textBox3.Text + " ',' " + …+ " ')"; 删除: //SQL形式 string strDel = "DELETE * FROM table1 WHERE 日期= ' " +dm.ToString() + " ' "; 更新: //SQL形式 string strUpdate = "UPDATE table1 SET" + " 地点='" + this.textBox1.Text + "',人物='" + this.textBox6.Text + "'WHERE 日期='" + this.textBox5.Text + "'"; 二、 具体的操作本文讨论如何使用 ADO.NET 检索 Microsoft Excel 工作簿中的数据、修改现有工作簿中的数据或将数据添加至新的工作簿中。要通过 ADO.NET 访问 Excel 工作簿,您可以使用 Jet OLE DB 提供程序。
如何将 Jet OLE DB 提供程序与 Microsoft Excel 工作簿配合使用 Microsoft Jet 数据库引擎可以通过可安装的索引顺序访问方法 (ISAM) 驱动程序,访问格式为其他数据库文件(例如 Excel 工作簿)的数据。要打开 Microsoft Jet 4.0 OLE DB 提供程序所支持的外部格式,请在连接的扩展属性中指定数据库类型。Jet OLE DB 提供程序对于 Microsoft Excel 工作簿支持下列数据库类型:Excel 3.0 、Excel 4.0 、Excel 5.0 、Excel 8.0 、… 注意:对于 Microsoft Excel 5.0 和 7.0 (95) 工作簿,请使用 Excel 5.0 源数据库类型;对于 Microsoft Excel 8.0 (97)、9.0 (2000) 和 10.0 (2002) 工作簿,请使用 Excel 8.0 源数据库类型。本文中的示例使用的是格式为 Excel 2000 和 Excel 2002 的 Excel 工作簿。
1、连接字符串 要使用 Jet OLE DB 提供程序访问 Excel 工作簿,请使用具有下列语法的连接字符串: string Provider=” Microsoft.Jet.OLEDB.4.0; Data Source=C:/Book1.xls; Extended Properties=’Excel 8.0;HDR=YES’ “ 示例 static private string startFilePath = @"C:\Users\Weng\Desktop\book.xls"; private string connStr = "provider=microsoft.jet.oledb.4.0;data source=" + startFilePath + "; extended properties='Excel 8.0;HDR=yes; IMEX=2'";
在连接字符串中,用 Data Source 参数指定工作簿的完整路径和文件名。Extended Properties 参数可包含两种属性:一个属性用于 ISAM 版本,一个属性用于指示表是否包括标题。
使用 Excel 工作簿时,默认情况下,区域中的第一行是标题行(或字段名称)。如果第一个区域不包含标题,可以在连接字符串的扩展属性中指定 HDR=NO。如果您在连接字符串中指定 HDR=NO,Jet OLE DB 提供程序将自动为您命名字段(F1 表示第一个字段,F2 表示第二个字段,依此类推)。
2、如何将 Excel 工作簿用作 ADO.NET 数据源 2.1检索记录 您可以使用 ADO.NET 中的两种方法之一检索数据库中的记录: (a) Dataset 为从数据源检索到的记录的缓存。Dataset 中的数据通常要比数据库中的数据精简得多。但是,您可以像使用实际数据一样使用它,并且无须与实际数据库连接。除了数据检索之外,还可以使用 Dataset 在基础数据库上执行更新操作。 //微软的一个数据更新函数 public static DataSet UpdateRows(string connectionString,string queryString, string tableName) { DataSet dataSet = new DataSet(); using (OleDbConnection connection = new OleDbConnection(connectionString)) { OleDbDataAdapter adapter = new OleDbDataAdapter(); adapter.SelectCommand = new OleDbCommand(queryString, connection); OleDbCommandBuilder cb = new OleDbCommandBuilder(adapter); connection.Open(); adapter.Fill(dataSet, tableName); //code to modify data in DataSet here //Without the OleDbCommandBuilder this line would fail adapter.Update(dataSet, tableName); connection.Close(); } return dataSet; } (b) DataReader 从数据库中检索只读、只进数据流。当您使用 DataReader 程序时,由于内存中每次仅有一行,因此性能将增强,系统开销将降低。如果您有大量数据需要检索并且不希望更改基础数据库,则 DataReader 是比 Dataset 更好的选择。
2.2 添加和更新记录使用 ADO.NET,您可以通过三种方式之一在工作簿中插入和更新记录: (1)直接运行一个命令,每次插入或更新一个记录。为此,您可以在自己的连接上创建一个 OLEDbCommand 对象,并将其 CommandText 属性设置成一个插入记录的有效命令 INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC') 或一个可更新记录的命令, UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111' 然后调用 ExecuteNonQuery 方法。 (2)对使用 Excel 工作簿中的一个表/查询填充的一个 DataSet 做一些更改,然后调用 DataAdapter 的 Update 方法,以将这些更改从 DataSet 解析回工作簿。不过,要使用 Update 方法执行更新解析,您必须为 DataAdapter 的 InsertCommand(?)设置参数化命令: INSERT INTO [Sheet1$] (F1, F2) values (?, ?) 并为 UpdateCommand 设置参数化命令: UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ? 必须要用 INSERT 和 UPDATE 的参数化命令,因为 OleDbDataAdapter 不提供 Excel 工作簿的主键/索引信息;没有主键/索引字段,CommandBuilder 就无法自动为您生成命令。 (3)将其它数据源(本文件、Microsoft Access 数据库,当然也包括其他 Excel 工作簿)中的数据导出到 Excel 工作簿中,可通过 Jet OLE DB 提供的程序。使用单个INSERT INTO 命令,可以将其他表/查询中的数据导出到您的工作簿中: INSERT INTO [Sheet1$] IN 'C:/Book1.xls' 'Excel 8.0;' SELECT * FROM MyTable" INSERT INTO 要求目标表(或工作表)已存在,并且数据已附加到目标表中。
您还可以使用 SELECT..INTO 将您的表/查询导出到工作簿中: SELECT * INTO [Excel 8.0;Database=C:/Book1.xls].[Sheet1] FROM [MyTable] 当您使用 SELECT..INTO 时,如果目标表或工作簿不存在,将为您创建。如果在发出 SELECT..INTO 命令之前表已存在,您将收到错误信息。 稍后的示例代码 部分对这些在工作簿中添加和更新记录的方法中的每一种都进行了说明。
2.3删除记录 虽然 Jet OLE DB 提供程序允许您在 Excel 工作簿中插入和更新记录,但是不允许进行 DELETE(删除)操作。如果您尝试对一个或多个记录执行 DELETE 操作,您将收到以下错误信息: Deleting data in a linked table is not supported by this ISAM. 这是将 Excel 工作簿作为数据库进行处理时所固有的限制。
2.4创建工作簿和表 要在 Excel 工作簿中创建表,请运行 CREATE TABLE 命令: CREATE TABLE Sheet1 (F1 char(255), F2 char(255)) 当您运行此命令时,将使用您在命令中指定的表名称创建新的工作表。如果不存在要连接的工作簿,也会创建该工作簿。 2.5示例代码(VB形式)
试运行
参考资料 [1] C#数据库操作——新建表、查询、删除、添加、更新等没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。
永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧!
多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
分类: C#、WebService |
|