日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

OLEDB Excel 与C# 的数据流通方法

發(fā)布時間:2023/12/20 C# 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OLEDB Excel 与C# 的数据流通方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、???????????? 名詞解釋:

  • OleDbCommand 是對數(shù)據(jù)源執(zhí)行各種操作的SQL語句或者存儲過程,連接access、excel等數(shù)據(jù)文件進(jìn)行數(shù)據(jù)操作時候用到的,其實(shí)和sqlcommand差不多用法
  • OLE DB它是微軟的戰(zhàn)略性的通向不同的數(shù)據(jù)源的低級應(yīng)用程序接口。OLE DB不僅包括微軟資助的標(biāo)準(zhǔn)數(shù)據(jù)接口開放數(shù)據(jù)庫連通性(ODBC)的結(jié)構(gòu)化查詢語言(SQL)能力,還具有面向其他非SQL數(shù)據(jù)類型的通路。 作為微軟的組件對象模型(COM)的一種設(shè)計,OLE DB是一組讀寫數(shù)據(jù)的方法(在過去可能被稱為渠道)。OLD DB中的對象主要包括數(shù)據(jù)源對象、階段對象、命令對象和行組對象。
  • 讀取、插入、刪除和更新操作
  • 它如同普通SQL數(shù)據(jù)庫一樣的操作。下面先簡單的介紹一下SQL數(shù)據(jù)庫記錄操作的語句。

    數(shù)據(jù)類型:與傳統(tǒng)的數(shù)據(jù)庫不同,在 Excel 表中沒有指定列的數(shù)據(jù)類型的直接方式。而是通過OLE DB 提供程序的程序,對一列中的八行進(jìn)行掃描來猜測該字段的數(shù)據(jù)類型。您可以通過為連接字符串的擴(kuò)展屬性中的 MAXSCANROWS 設(shè)置指定一個一 (1) 至十六 (16) 之間的值,來更改要掃描的行數(shù)。

    查詢?????? select * from [表名$]

    (1)使用帶有定義名稱的區(qū)域(例如 [MyNamedRange])

    Select * from [MyNamedRange]

    (2)使用帶有特定地址的區(qū)域(例如 [Sheet1$A1:B10]):

    Select * from [Sheet1$A1:B10]

    注意:工作表名稱后面帶美元符號表示該表存在。如果您要創(chuàng)建一個新表,如本文 創(chuàng)建新工作簿和表 一節(jié)中所討論的那樣,請不要使用美元符號。

    //示例 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 地點(diǎn) 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" + " 地點(diǎn)='" + this.textBox1.Text + "',人物='" + this.textBox6.Text + "'WHERE 日期='" + this.textBox5.Text + "'";

    二、???????????? 具體的操作

    本文討論如何使用 ADO.NET 檢索 Microsoft Excel 工作簿中的數(shù)據(jù)、修改現(xiàn)有工作簿中的數(shù)據(jù)或?qū)?shù)據(jù)添加至新的工作簿中。要通過 ADO.NET 訪問 Excel 工作簿,您可以使用 Jet OLE DB 提供程序。

    ?

    如何將 Jet OLE DB 提供程序與 Microsoft Excel 工作簿配合使用

    Microsoft Jet 數(shù)據(jù)庫引擎可以通過可安裝的索引順序訪問方法 (ISAM) 驅(qū)動程序,訪問格式為其他數(shù)據(jù)庫文件(例如 Excel 工作簿)的數(shù)據(jù)。要打開 Microsoft Jet 4.0 OLE DB 提供程序所支持的外部格式,請?jiān)谶B接的擴(kuò)展屬性中指定數(shù)據(jù)庫類型。Jet OLE DB 提供程序?qū)τ?Microsoft Excel 工作簿支持下列數(shù)據(jù)庫類型:Excel 3.0 、Excel 4.0 、Excel 5.0 、Excel 8.0 、…

    注意:對于 Microsoft Excel 5.0 和 7.0 (95) 工作簿,請使用 Excel 5.0 源數(shù)據(jù)庫類型;對于 Microsoft Excel 8.0 (97)、9.0 (2000) 和 10.0 (2002) 工作簿,請使用 Excel 8.0 源數(shù)據(jù)庫類型。本文中的示例使用的是格式為 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 參數(shù)指定工作簿的完整路徑和文件名。Extended Properties 參數(shù)可包含兩種屬性:一個屬性用于 ISAM 版本,一個屬性用于指示表是否包括標(biāo)題。

    ?

    使用 Excel 工作簿時,默認(rèn)情況下,區(qū)域中的第一行是標(biāo)題行(或字段名稱)。如果第一個區(qū)域不包含標(biāo)題,可以在連接字符串的擴(kuò)展屬性中指定 HDR=NO。如果您在連接字符串中指定 HDR=NO,Jet OLE DB 提供程序?qū)⒆詣訛槟侄?#xff08;F1 表示第一個字段,F2 表示第二個字段,依此類推)。

    ?

    ?

    2、如何將 Excel 工作簿用作 ADO.NET 數(shù)據(jù)源

    2.1檢索記錄

    您可以使用 ADO.NET 中的兩種方法之一檢索數(shù)據(jù)庫中的記錄:

    (a)??? Dataset

    為從數(shù)據(jù)源檢索到的記錄的緩存。Dataset 中的數(shù)據(jù)通常要比數(shù)據(jù)庫中的數(shù)據(jù)精簡得多。但是,您可以像使用實(shí)際數(shù)據(jù)一樣使用它,并且無須與實(shí)際數(shù)據(jù)庫連接。除了數(shù)據(jù)檢索之外,還可以使用 Dataset 在基礎(chǔ)數(shù)據(jù)庫上執(zhí)行更新操作

    ??? //微軟的一個數(shù)據(jù)更新函數(shù)

    ??????? 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

    從數(shù)據(jù)庫中檢索只讀、只進(jìn)數(shù)據(jù)流。當(dāng)您使用 DataReader 程序時,由于內(nèi)存中每次僅有一行,因此性能將增強(qiáng),系統(tǒng)開銷將降低。如果您有大量數(shù)據(jù)需要檢索并且不希望更改基礎(chǔ)數(shù)據(jù)庫,則 DataReader 是比 Dataset 更好的選擇。

    ?

    ?

    2.2 添加和更新記錄使用 ADO.NET,您可以通過三種方式之一在工作簿中插入和更新記錄:

    (1)直接運(yùn)行一個命令,每次插入或更新一個記錄。為此,您可以在自己的連接上創(chuàng)建一個 OLEDbCommand 對象,并將其 CommandText 屬性設(shè)置成一個插入記錄的有效命令

    INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')

    或一個可更新記錄的命令,

    UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111'

    然后調(diào)用 ExecuteNonQuery 方法。

    (2)對使用 Excel 工作簿中的一個表/查詢填充的一個 DataSet 做一些更改,然后調(diào)用 DataAdapter 的 Update 方法,以將這些更改從 DataSet 解析回工作簿。不過,要使用 Update 方法執(zhí)行更新解析,您必須為 DataAdapter InsertCommand(?)設(shè)置參數(shù)化命令

    INSERT INTO [Sheet1$] (F1, F2) values (?, ?)

    并為 UpdateCommand 設(shè)置參數(shù)化命令:

    UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ?

    必須要用 INSERT 和 UPDATE 的參數(shù)化命令,因?yàn)?OleDbDataAdapter 不提供 Excel 工作簿的主鍵/索引信息;沒有主鍵/索引字段,CommandBuilder 就無法自動為您生成命令。

    (3)將其它數(shù)據(jù)源(本文件、Microsoft Access 數(shù)據(jù)庫,當(dāng)然也包括其他 Excel 工作簿)中的數(shù)據(jù)導(dǎo)出到 Excel 工作簿中,可通過 Jet OLE DB 提供的程序。使用單個INSERT INTO 命令,可以將其他表/查詢中的數(shù)據(jù)導(dǎo)出到您的工作簿中

    INSERT INTO [Sheet1$] IN 'C:/Book1.xls' 'Excel 8.0;' SELECT * FROM MyTable"

    INSERT INTO 要求目標(biāo)表(或工作表)已存在,并且數(shù)據(jù)已附加到目標(biāo)表中。

    ?

    您還可以使用 SELECT..INTO 將您的表/查詢導(dǎo)出到工作簿中:

    SELECT * INTO [Excel 8.0;Database=C:/Book1.xls].[Sheet1] FROM [MyTable]

    當(dāng)您使用 SELECT..INTO 時,如果目標(biāo)表或工作簿不存在,將為您創(chuàng)建。如果在發(fā)出 SELECT..INTO 命令之前表已存在,您將收到錯誤信息。

    稍后的示例代碼 部分對這些在工作簿中添加和更新記錄的方法中的每一種都進(jìn)行了說明。

    ?

    2.3刪除記錄

    雖然 Jet OLE DB 提供程序允許您在 Excel 工作簿中插入和更新記錄,但是不允許進(jìn)行 DELETE(刪除)操作。如果您嘗試對一個或多個記錄執(zhí)行 DELETE 操作,您將收到以下錯誤信息:

    Deleting data in a linked table is not supported by this ISAM.

    這是將 Excel 工作簿作為數(shù)據(jù)庫進(jìn)行處理時所固有的限制。

    ?

    2.4創(chuàng)建工作簿和表

    要在 Excel 工作簿中創(chuàng)建表,請運(yùn)行 CREATE TABLE 命令:

    CREATE TABLE Sheet1 (F1 char(255), F2 char(255))

    當(dāng)您運(yùn)行此命令時,將使用您在命令中指定的表名稱創(chuàng)建新的工作表。如果不存在要連接的工作簿,也會創(chuàng)建該工作簿。

    2.5示例代碼(VB形式)

    1.

    啟動一個新的 Visual Basic .NET Windows 應(yīng)用程序項(xiàng)目。默認(rèn)情況下會創(chuàng)建 Form1

    2.

    Form1 添加六個 RadioButton(單選按鈕)控件和一個 Button(按鈕)控件。

    3.

    選中所有單選按鈕控件,并將大小屬性設(shè)置為 200,24

    4.

    視圖菜單上,單擊代碼

    5.

    在代碼模塊的開始處添加以下行:

    Imports ? System.Data.OleDb

    ?

    ?

    ?

    6. 將以下代碼插入到Form 類中:

    Private ? m_sConn1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

    ??"Data ? Source=C:/ExcelData1.xls;" & _

    ??"Extended ? Properties=""Excel 8.0;HDR=YES"""

    ??Private ? m_sConn2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _

    ??"Data ? Source=C:/ExcelData2.xls;" & _

    ??"Extended ? Properties=""Excel 8.0;HDR=YES"""

    ??Private ? m_sNorthwind = _

    ??"C:/Program ? Files/Microsoft Office/Office10/Samples/Northwind.mdb"

    ??Private ? m_sAction As String

    ??Private ? Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) ? Handles MyBase.Load

    ??RadioButton1.Text ? = "Create_Workbook"

    ??RadioButton2.Text ? = "Retrieve_Records"

    ??RadioButton3.Text ? = "Add_Records"

    ??RadioButton4.Text ? = "Update_Records"

    ??RadioButton5.Text ? = "Update_Individual_Cells"

    ??RadioButton6.Text ? = "Use_External_Source"

    ??Button1.Text ? = "Go!"

    ??End ? Sub

    ??Private ? Sub RadioButtons_Click(ByVal sender As Object, ByVal e As System.EventArgs) _

    ??Handles ? RadioButton1.Click, RadioButton2.Click, RadioButton3.Click, _

    ??RadioButton4.Click, ? RadioButton5.Click, RadioButton6.Click

    ??m_sAction ? = sender.Text'Store the text for the selected radio button

    ??End ? Sub

    ??Private ? Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) ? Handles Button1.Click

    ??Try

    ??' ? Call the associated routine to add/update/modify the workbook.

    ??Select ? Case m_sAction

    ??Case ? "Create_Workbook" : Create_Workbook()

    ??Case ? "Retrieve_Records" : Retrieve_Records()

    ??Case ? "Add_Records" : Add_Records()

    ??Case ? "Update_Records" : Update_Records()

    ??Case ? "Update_Individual_Cells" : Update_Individual_Cells()

    ??Case ? "Use_External_Source" : Use_External_Source()

    ??End ? Select

    ??Catch ? ex As OleDbException

    ??Dim ? er As OleDbError

    ??For ? Each er In ex.Errors

    ??MsgBox(er.Message)

    ??Next

    ??Catch ? ex2 As System.InvalidOperationException

    ??MsgBox(ex2.Message)

    ??End ? Try

    ??End ? Sub

    ??Public ? Sub Create_Workbook()

    ??' If ? the workbooks already exist, prompt to delete.

    ??Dim ? answer As MsgBoxResult

    ??If ? Dir("C:/ExcelData1.xls") <> "" Or ? Dir("C:/ExcelData2.xls") <> "" Then

    ??answer ? = MsgBox("Delete existing workbooks (C:/ExcelData1.xls and " & ? _

    ??"C:/ExcelData2.xls)?", ? MsgBoxStyle.YesNo)

    ??If ? answer = MsgBoxResult.Yes Then

    ??If ? Dir("C:/ExcelData1.xls") <> "" Then ? Kill("C:/ExcelData1.xls")

    ??If ? Dir("C:/ExcelData2.xls") <> "" Then ? Kill("C:/ExcelData2.xls")

    ??Else

    ??Exit ? Sub

    ??End ? If

    ??End ? If

    ??'==========================================================================

    ??' ? Create a workbook with a table named EmployeeData. The table has 3

    ??' ? fields: ID (char 255), Name (char 255) and Birthdate (date).

    ??'==========================================================================

    ??Dim ? conn As New OleDbConnection()

    ??conn.ConnectionString ? = m_sConn1

    ??conn.Open()

    ??Dim ? cmd1 As New OleDbCommand()

    ??cmd1.Connection ? = conn

    ??cmd1.CommandText ? = "CREATE TABLE EmployeeData (Id char(255), Name char(255), BirthDate ? date)"

    ??cmd1.ExecuteNonQuery()

    ??cmd1.CommandText ? = "INSERT INTO EmployeeData (Id, Name, BirthDate) values ('AAA', ? 'Andrew', '12/4/1955')"

    ??cmd1.ExecuteNonQuery()

    ??conn.Close()

    ??'==========================================================================

    ??' ? Create a workbook with a table named InventoryData. The table has 3

    ??' ? fields: Product (char 255), Qty (float) and Price (currency).

    ??'==========================================================================

    ??conn.ConnectionString ? = m_sConn2

    ??conn.Open()

    ??Dim ? cmd2 As New OleDbCommand()

    ??cmd2.Connection ? = conn

    ??cmd2.CommandText ? = "CREATE TABLE InventoryData (Product char(255), Qty float, Price ? currency)"

    ??cmd2.ExecuteNonQuery()

    ??cmd2.CommandText ? = "INSERT INTO InventoryData (Product, Qty, Price) values ('Cola', 200, ? 1.35)"

    ??cmd2.ExecuteNonQuery()

    ??cmd2.CommandText ? = "INSERT INTO InventoryData (Product, Qty, Price) values ('Chips', 550, ? 0.89)"

    ??cmd2.ExecuteNonQuery()

    ??conn.Close()

    ??' ? NOTE: You can ALTER and DROP tables in a similar fashion.

    ??End ? Sub

    ??Public ? Sub Retrieve_Records()

    ??'==========================================================

    ??'Use ? a DataReader to read data from the EmployeeData table.

    ??'==========================================================

    ??Dim ? conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)

    ??conn1.Open()

    ??Dim ? cmd1 As New System.Data.OleDb.OleDbCommand("Select ? * From [EmployeeData$]", conn1)

    ??Dim ? rdr As OleDbDataReader = cmd1.ExecuteReader

    ??Debug.WriteLine(vbCrLf ? & "EmployeeData:" & vbCrLf & "=============")

    ??Do ? While rdr.Read()

    ??Debug.WriteLine(System.String.Format("{0,-10}{1, ? -15}{2}", _

    ??rdr.GetString(0), ? rdr.GetString(1), _

    ??rdr.GetDateTime(2).ToString("d")))

    ??Loop

    ??rdr.Close()

    ??conn1.Close()

    ??'========================================================

    ??'Use ? a DataSet to read data from the InventoryData table.

    ??'========================================================

    ??Dim ? conn2 As New OleDbConnection(m_sConn2)

    ??Dim ? da As New OleDbDataAdapter("Select ? * From [InventoryData$]", conn2)

    ??Dim ? ds As DataSet = New DataSet()

    ??da.Fill(ds)

    ??Debug.WriteLine(vbCrLf ? & "InventoryData:" & vbCrLf & ? "==============")

    ??Dim ? dr As DataRow

    ??For ? Each dr In ds.Tables(0).Rows'Show results in output window

    ??Debug.WriteLine(System.String.Format("{0,-15}{1, ? -6}{2}", _

    ??dr("Product"), ? dr("Qty"), dr("Price")))

    ??Next

    ??conn2.Close()

    ??End ? Sub

    ??Public ? Sub Add_Records()

    ??'==========================================================================

    ??' Run ? an INSERT INTO command to add new records to the workbook.

    ??'==========================================================================

    ??Dim ? conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)

    ??conn1.Open()

    ??Dim ? cmd As New System.Data.OleDb.OleDbCommand()

    ??cmd.Connection = conn1

    ??cmd.CommandText = "INSERT INTO ? [EmployeeData$] (ID, Name, BirthDate) values ('CCC', 'Charlie', ? '10/14/48')"

    ??cmd.ExecuteNonQuery()

    ??cmd.CommandText = "INSERT INTO ? [EmployeeData$] (ID, Name, BirthDate) values ('DDD', 'Deloris', ? '7/19/98')"

    ??cmd.ExecuteNonQuery()

    ??conn1.Close()

    ??'====================================================================

    ??'Use ? the InsertCommand object to add new records to the InventoryData

    ??'table.

    ??'====================================================================

    ??Dim ? conn2 As New OleDbConnection(m_sConn2)

    ??Dim ? da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)

    ??Dim ? ds As DataSet = New DataSet()

    ??da.Fill(ds, ? "MyExcelTable")

    ??' ? Generate the InsertCommand and add the parameters for the command.

    ??da.InsertCommand ? = New OleDbCommand( _

    ??"INSERT INTO [InventoryData$] (Product, ? Qty, Price) VALUES (?, ?, ?)", conn2)

    ??da.InsertCommand.Parameters.Add("@Product", ? OleDbType.VarChar, 255, "Product")

    ??da.InsertCommand.Parameters.Add("@Qty", ? OleDbType.Double).SourceColumn = "Qty"

    ??da.InsertCommand.Parameters.Add("@Price", ? OleDbType.Currency).SourceColumn = "Price"

    ??' Add two new records to the dataset.

    ??Dim ? dr As DataRow

    ??dr = ? ds.Tables(0).NewRow

    ??dr("Product") ? = "Bread" : dr("Qty") = 390 : dr("Price") = ? 1.89 : ds.Tables(0).Rows.Add(dr)

    ??dr = ? ds.Tables(0).NewRow

    ??dr("Product") ? = "Milk" : dr("Qty") = 99 : dr("Price") = 2.59 ? : ds.Tables(0).Rows.Add(dr)

    ??' ? Apply the dataset changes to the actual data source (the workbook).

    ??da.Update(ds, ? "MyExcelTable")

    ??conn2.Close()

    ??End ? Sub

    ??Public ? Sub Update_Records()

    ??'==========================================================================

    ??' Run ? an UPDATE command to change a record in the EmployeeData

    ??' ? table.

    ??'==========================================================================

    ??Dim ? conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)

    ??conn1.Open()

    ??Dim ? cmd As New System.Data.OleDb.OleDbCommand()

    ??cmd.Connection ? = conn1

    ??cmd.CommandText ? = "UPDATE [EmployeeData$] " & _

    ??"SET ? NAME = 'Aaron', BirthDate = '5/4/1975' WHERE ID = 'AAA'"

    ??cmd.ExecuteNonQuery()

    ??conn1.Close()

    ??'====================================================================

    ??' Use ? the UpdateCommand object to modify records in the InventoryData

    ??' ? table.

    ??'====================================================================

    ??Dim ? conn2 As New OleDbConnection(m_sConn2)

    ??Dim ? da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)

    ??Dim ? ds As DataSet = New DataSet()

    ??da.Fill(ds, ? "MyInventoryTable")

    ??' ? Generate the UpdateCommand and add the parameters for the command.

    ??da.UpdateCommand ? = New OleDbCommand( _

    ??"UPDATE ? [InventoryData$] SET Qty = ?, Price=? WHERE Product = ?", conn2)

    ??da.UpdateCommand.Parameters.Add("@Qty", ? OleDbType.Numeric).SourceColumn = "Qty"

    ??da.UpdateCommand.Parameters.Add("@Price", ? OleDbType.Currency).SourceColumn = "Price"

    ??da.UpdateCommand.Parameters.Add("@Product", ? OleDbType.VarChar, 255, "Product")

    ??' ? Update the first two records.

    ??ds.Tables(0).Rows(0)("Qty") ? = 1000

    ??ds.Tables(0).Rows(0)("Price") ? = 10.1

    ??ds.Tables(0).Rows(1)("Qty") ? = 2000

    ??ds.Tables(0).Rows(1)("Price") ? = 20.2

    ??' ? Apply the dataset changes to the actual data source (the workbook).

    ??da.Update(ds, ? "MyInventoryTable")

    ??conn2.Close()

    ??End ? Sub

    ??Public ? Sub Update_Individual_Cells()

    ??'==========================================================================

    ??' ? Update individual cells on the EmployeeData worksheet;

    ??' ? specifically, cells F3, G3, and I4 are modified.

    ??'==========================================================================

    ??' ? NOTE: The connection string indicates that the table does *NOT*

    ??' ? have a header row.

    ??Dim ? conn As New ? System.Data.OleDb.OleDbConnection(m_sConn1.Replace("HDR=YES", ? "HDR=NO"))

    ??conn.Open()

    ??Dim ? cmd As New System.Data.OleDb.OleDbCommand()

    ??cmd.Connection ? = conn

    ??cmd.CommandText ? = "UPDATE [EmployeeData$F3:G3] SET F1 = 'Cell F3', F2 = 'Cell G3'"

    ??cmd.ExecuteNonQuery()

    ??cmd.CommandText ? = "UPDATE [EmployeeData$I4:I4] SET F1 = 'Cell I4'"

    ??cmd.ExecuteNonQuery()

    ??conn.Close()

    ??End ? Sub

    ??Public ? Sub Use_External_Source()

    ??' ? Open a connection to the sample Northwind Access database.

    ??Dim ? conn As New System.Data.OleDb.OleDbConnection( _

    ??"Provider=Microsoft.Jet.OLEDB.4.0;Data ? Source=" & m_sNorthwind & ";")

    ??conn.Open()

    ??Dim ? cmd As New System.Data.OleDb.OleDbCommand()

    ??cmd.Connection ? = conn

    ??'=======================================================================

    ??' Run ? an INSERT..INTO command on the Northwind database to append

    ??' the ? records from a table/query to an existing table in the Excel

    ??' ? workbook.

    ??'=======================================================================

    ??cmd.CommandText ? = "INSERT INTO [EmployeeData$] IN 'C:/ExcelData1.xls' 'Excel 8.0;'" ? & _

    ??"SELECT ? EmployeeID AS ID, FirstName AS Name, BirthDate FROM Employees"

    ??cmd.ExecuteNonQuery()

    ??'==========================================================================

    ??' Run ? a SELECT..INTO command on the Northwind database to insert

    ??' all ? the records from a table/query into a new sheet in the Excel

    ??' ? workbook.

    ??'==========================================================================

    ??cmd.CommandText ? = "SELECT * INTO [Excel ? 8.0;Database=C:/ExcelData2.xls].[ProductSales]" & _

    ??"FROM ? [Product Sales for 1997]"

    ??cmd.ExecuteNonQuery()

    ??conn.Close()

    ??End ? Sub

    7.

    如果需要,可為代碼中的 m_sNorthwind 成員修改指向 Access 示例數(shù)據(jù)庫 Northwind 的路徑。

    試運(yùn)行

    1.

    視圖菜單上,指向其他窗口,然后單擊輸出以顯示輸出窗口。

    2.

    按 F5 鍵生成并運(yùn)行程序。

    3.

    單擊 Create_Workbook,然后單擊 Go(執(zhí)行。下同)。Create_Workbook 過程將運(yùn)行 CREATE TABLE 命令以創(chuàng)建兩個新的工作簿:C:/ExcelData1.xls 和 C:/ExcelData2.xls。ExcelData1.xls 包含一個名為 EmployeeData 的工作表(表),ExcelData2.xls 包含一個名為 InventoryData 的工作表(表)。這兩個表都填入了記錄。

    ?

    注意:請?jiān)诖藴y試的每個其余步驟中,在 Excel 中打開工作簿以檢查結(jié)果。或者,單擊 Retrieve_Records 以在 Visual Studio ? .NET 的輸出窗口中查看表內(nèi)容。

    4.

    單擊 Retrieve_Records,然后單擊 GoRetrieve_Records 過程將從表中提取記錄并將它們顯示在輸出窗口中,輸出的記錄類似于下面的內(nèi)容:

    EmployeeData:

    ??=============

    ??AAA Andrew ? ?12/4/1955

    ??InventoryData:

    ??==============

    ??Cola ?200 1.35

    ??Chips ? ?550 0.89

    5.

    單擊 Add_Records,然后單擊 GoAdd_Records 例程將向每個表添加兩條記錄:

    EmployeeData:

    ??=============

    ??AAA Andrew ? ?12/4/1955

    ??CCC Charlie ? 10/14/1948

    ??DDD Deloris ? 7/19/1998

    ??InventoryData:

    ??==============

    ??Cola ?200 1.35

    ??Chips ? ?550 0.89

    ??Bread ? ?390 1.89

    ??Milk ?99 2.59

    6.

    單擊 Update_Records,然后單擊 GoUpdate_Records 例程在每一個工作簿中更新兩條記錄:

    EmployeeData:

    ??=============

    ??AAA Aaron ? ?5/4/1975

    ??CCC Charlie ? 10/14/1948

    ??DDD Deloris ? 7/19/1998

    ??InventoryData:

    ??==============

    ??Cola ?1000 10.1

    ??Chips ? ?2000 20.2

    ??Bread ? ?390 1.89

    ??Milk ?99 2.59

    7.

    單擊 Update_Individual_Cells,然后單擊 GoUpdate_Individual_Cells 例程修改 ExcelData1.xls 中 EmployeeData 工作表上的特定單元格;具體就是單元格 F3、G3 和 I4 將被更新。

    8.

    單擊 Use_External_Source,然后單擊 Go。當(dāng)您使用 INSERT..INTO 命令時,Use_External_Source 例程將 Northwind 表“Employees”中的記錄追加到 ExcelData1.xls 中的 EmployeeData 工作表中。并且,Use_External_Source 使用 SELECT..INTO 命令在 ExcelData2.xls 中創(chuàng)建一個包含 Northwind 表“Products”中的所有記錄的新表(或工作表)。

    ?

    注意:如果您單擊 Use_External_Source 多次,Employees 列表將被追加多次,原因是主鍵未被識別或?qū)嵤?/span>

    ?

    ?

    ?

    參考資料

    [1] C#數(shù)據(jù)庫操作——新建表、查詢、刪除、添加、更新等

    http://blog.sina.com.cn/s/blog_4b1260cb0100kjfj.html

    【2】http://blog.csdn.net/zhrtzc/article/details/5219855#

    總結(jié)

    以上是生活随笔為你收集整理的OLEDB Excel 与C# 的数据流通方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。