国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

從 .NET 應(yīng)用程序訪問 Microsoft Office 數(shù)據(jù)

2019-11-18 12:03:39
字體:
供稿:網(wǎng)友

  引言
  在 Microsoft .NET 應(yīng)用程序中使用 Microsoft Office 數(shù)據(jù)時所需的大多數(shù)任務(wù)與使用任何其他數(shù)據(jù)時的任務(wù)相同 - 創(chuàng)建連接、根據(jù)使用數(shù)據(jù)時的需要創(chuàng)建 DataReader 或 DataAdapter、創(chuàng)建一個或多個 DataSet 來封裝相關(guān)數(shù)據(jù)的 DataTable,等等。因此,我不打算在此重新編寫 ADO.NET 文檔。本文的目的在于,提供按 Office 數(shù)據(jù)源編寫基礎(chǔ)數(shù)據(jù)檢索代碼時所需的缺失或廣為分布的信息段。似乎那些知道 Jet 的奇異之處的人士卻不是很熟悉 ADO.NET,而大部分的 ADO.NET 專業(yè)人士不是很了解支持 Office 可編程序性的技術(shù)。因此提供一個快速的概述,希望可以解答我所見到的這兩方的常見問題。
  
  首先讓我們討論一下連接到 Microsoft Excel 和 Microsoft access 的數(shù)據(jù)并從中檢索數(shù)據(jù)的基礎(chǔ)。我認為此領(lǐng)域中存在最大的問題 - 通常一旦人們能夠解決該問題,Office 特定問題將會得到解決,而且其余問題主要集中于如何使用 ADO.NET。下面我將討論如何使用 OleDbConnection 對象的 GetOleDbSchemaTable 方法來檢索關(guān)于運行時 Access 或 Excel 數(shù)據(jù)的架構(gòu)信息。這樣,您可以避開關(guān)于數(shù)據(jù)源的硬編碼信息;數(shù)據(jù)源非常有用,從中可以獲取數(shù)據(jù)。
  
  建立連接
  假如要連接到 Excel 電子表格或 Access 數(shù)據(jù)庫,則需要創(chuàng)建一個 OleDbConnection 對象,并向其傳遞一個帶有目標(biāo)數(shù)據(jù)源具體信息的連接字符串。您需要為 PRovider 屬性指定 Jet 4.0 OLE DB 提供程序。
  
  連接到 Access
  讓我們看一看用于 Access 數(shù)據(jù)庫的典型連接字符串:
  
  "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:/Databases/mymusic.mdb"
  
  這非常簡單 - 它僅指定 Provider 和 Data Source 屬性。如上所述,Provider 是 Jet 4.0 提供程序,而 Data Source 屬性包含數(shù)據(jù)庫的完全限定路徑。
  
  當(dāng)然,您甚至還需要確保 Access 數(shù)據(jù)庫的安全,對不對?這樣,您還需要指定工作組信息文件(默認情況下為 system.mdw)的路徑,并提供用戶 ID 和密碼:
  
  "Provider=Microsoft.Jet.OLEDB.4.0;Data " & _
  "Source=C:/Databases/mymusic.mdb; " & _
  "Jet OLEDB:System database=" & _
  "C:/Databases/system.mdw; " & _
  "User ID=UserX;PassWord=UserXPassword"
  
  請注重,指定控制 Access 數(shù)據(jù)庫安全性的 .mdw 文件時需要使用 Jet OLE DB 特定的屬性。假如希望更好地控制數(shù)據(jù)庫的行為,則可以瀏覽 Jet OLE DB 提供程序(該提供程序位于 Appendix B:Microsoft Jet 4.0 OLE DB Properties Reference)所提供的其他屬性,來控制鎖定行為和如何處理特定類型的失敗,等等。請注重,只有那些可以在連接字符串中設(shè)置的屬性才可以訪問;指定提供程序的屬性之前需要連接處于打開狀態(tài),否則將無法設(shè)置這些屬性。
  
  可以使用 Microsoft® Visual Studio® .NET,來獲取包括所有的 Jet OLE DB 提供程序設(shè)置、完整的 Access 連接字符串的模板。在服務(wù)器資源治理器中創(chuàng)建一個與 Access 數(shù)據(jù)庫的數(shù)據(jù)連接,然后使用工具箱的數(shù)據(jù)部分創(chuàng)建一個 OleDbConnection 對象。得到的對象的 ConnectionString 屬性會包含默認的所有 Jet OLE DB 提供程序?qū)傩浴?br />  
  連接到 Excel
  現(xiàn)在,讓我們看看 Excel 電子表格的典型連接字符串的外觀:
  
  "Provider=Microsoft.Jet.OLEDB.4.0;" & _
  "Data Source=C:/Spreadsheets/calculations.xls;" & _
  "Extended Properties=Excel 8.0"
  
  在連接到 Excel 文件的情況下,可以看到我們必須在連接字符串中使用 Extended Properties 屬性以及 Provider 和 Data Source。假如是 Excel 8.0 和更高版本,則使用“Excel 8.0”設(shè)置。假如希望獲取此屬性的其他可接受值的更多信息,請參閱 ADO Provider Properties and Settings 的“Extended Properties Property Settings”部分。
  
  您會說:“啊,但是 Excel 中的安全性怎么樣?”嗯,恐怕沒有激動人心的消息。您無法打開與受密碼保護的電子表格的連接,除非已手動地在 Excel 中打開此電子表格(有關(guān)具體信息,請參閱 XL2000:"Could Not Decrypt File" Error with Password Protected File)。描述的錯誤出現(xiàn)于 Excel ODBC 提供程序,但是在 Jet 4.0 OLE DB 提供程序中該行為相同。其他選項為,刪除電子表格的密碼并使用某些其他安全機制(例如,限制文件所在文件夾的權(quán)限)來控制訪問。
  
  不幸的是,您也無法使用 Visual Studio .NET 獲取 Excel 連接字符串的模板。進行一些小小的嘗試,即可創(chuàng)建 Excel 數(shù)據(jù)連接;但是您會發(fā)現(xiàn)其屬性不可編輯,而且 ConnectionString 屬性將保留空白 - 這是 IDE(集成的開發(fā)環(huán)境)中的奇異之處。有關(guān)具體信息,請參閱 PRB:Cannot Configure Data Connection to Excel Files in Visual Studio .NET。這樣,對于 Excel 連接,基本上都需要自己進行工作,但在這種情況下對連接進行編碼就像在用戶界面 (UI) 中創(chuàng)建連接一樣簡單。
  
  檢索數(shù)據(jù)
  現(xiàn)在已經(jīng)明白了如何建立與 Office 數(shù)據(jù)源的連接,就讓我們看看它是怎樣檢索數(shù)據(jù)的。出于簡單性的考慮,我打算使用 OleDbConnection/OleDbCommand/OleDbDataReader 數(shù)據(jù)檢索方案。相同的方法在稍稍調(diào)整之后,可以用于構(gòu)建 OleDbDataAdapter 并填充 DataSet。假如想要大體上了解一下 ADO.NET,請參閱《.NET Framework Developer's Guide》的 Accessing Data with ADO.NET 部分,它會為您帶來閱讀的樂趣。
  
  檢索 Access 數(shù)據(jù)
  編寫 Access 數(shù)據(jù)檢索代碼時請切記,指定 SQL 時必須遵循的語法具有某些特性。無法在圖形 UI 中創(chuàng)建 Access 查詢,無法訪問 SQL 視圖,無法復(fù)制得到的 SQL 語句并將其粘貼到代碼中。不,這本應(yīng)非常簡單的。生成的 SQL 代碼通常具有一部分但不是全部的所需語法。必須在 Access 開發(fā)環(huán)境中編寫代碼的任何人都會知道這一點,但是對于一般的 .NET 客戶端應(yīng)用程序開發(fā)人員而言,這算的上是新聞。最讓人煩心的是條件表達式,它需要以某種方式分隔 WHERE 字句中的特定類型的數(shù)據(jù)。日期和時間值必須使用數(shù)字記號 (#) 進行分隔。文本值必須使用單引號 (') 進行分隔。例如:
  
  SELECT City, Neighborhood, SalePrice, MonthsOnMarket
  FROM RealEstate
  WHERE ListingDate > #1/1/04#
  
  有關(guān)這些問題的具體信息,請參閱 Date and Time Criteria Expressions。
  
  需要記住的另一點看上去似乎顯而易見,但是卻使人們感到困惑,所以我將討論這一點:請確保 Access 表的列名稱不使用保留字??梢栽?SQL Reserved Words 處查詢保留字。假如使用任何保留字,我想說的是假如可能就重命名列。我知道假如您已使用數(shù)據(jù)庫,該操作則不太可能,所以必要時可以創(chuàng)建查詢并將其用作有問題列的表的替換查詢。僅使用 AS 重命名列,就如:
  
  SELECT Artists.ArtistName, Genres.Genre, Labels.Label,
  Tracks.Public AS Track, Releases.ReleaseName
  FROM (Labels INNER JOIN ((Artists...
  
  記住這些要點,讓我們來看一個示例:
  
  Imports System
  Imports System.Data
  Imports System.Data.OleDb
  ...
  Public Function GetAccessData(ByVal UID As String, _
  ByVal pwd As String, ByVal artist As String)
  
  Dim conn As New OleDbConnection
  Dim musicReader As OleDbDataReader
  Dim cmd As New OleDbCommand
  Dim connString As String
  Dim i As Integer
  
  Try
  ' 設(shè)置連接字符串。
  connString = "Jet OLEDB:System database=" & _
  "C:/Databases/system.mdw;" & _
  "Data Source=C:/Databases/mymusic.mdb;" & _
  "Provider=Microsoft.Jet.OLEDB.4.0;" & _
  "User ID=" & UID & ";Password=" & pwd
  
  ' 打開連接。
  conn.ConnectionString = connString
  conn.Open()
  
  '設(shè)置命令屬性。
  cmd.Connection = conn
  cmd.CommandText = "SELECT * from music " & _
  "WHERE ArtistName = '" & artist & "'"
  
  ' 獲取 OleDbDataReader
  ' 并對其進行一些處理。
  musicReader = _
  cmd.ExecuteReader(CommandBehavior.CloseConnection)
  Try
  While (musicReader.Read)
  '處理數(shù)據(jù)。
  End While
  Finally
  musicReader.Close()
  End Try
  
  Catch ex As Exception
  '錯誤處理
  End Try
  
  End Function 'GetAccessData
  
  檢索 Excel 數(shù)據(jù)
  關(guān)于列名稱,Excel 和 Access 一樣具有相同的保留字限制。一般而言,假如記住 SQL 保留字,并在創(chuàng)建可能用作數(shù)據(jù)源的任何對象時避開保留字,則會更好。還有一點需要考慮。
  
  Excel 的語法同樣也有奇異之處。對代碼影響最大的項是用于引用要返回的數(shù)據(jù)集的語法。
  
  注重:對于最簡單的 Excel 數(shù)據(jù)檢索,請使用維護類似表格式的電子表格。
  
  第一個選項是指定工作表和該表中的單元格集(可選)。需要確保工作表名稱后跟美元符號和單元格集(可選)。通過使用冒號分隔集合中的起始單元格和終止單元格,來指定此單元格集。然后,使用括號將整個數(shù)據(jù)標(biāo)識字符串括起。使用此類型語法的 SELECT 語句可能如下所示:
  
  SELECT SalesMonth, TotalSales, PercentageChange1Year
  FROM [Sheet1$A1:E24]
  
  另一個選項是在 Excel 中創(chuàng)

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 阿克陶县| 资溪县| 壤塘县| 女性| 洛宁县| 东丽区| 永宁县| 镇赉县| 厦门市| 孝昌县| 紫金县| 宁陵县| 沅陵县| 星子县| 桂东县| 临沭县| 无棣县| 沂源县| 临城县| 双柏县| 新野县| 房产| 施秉县| 台湾省| 确山县| 若羌县| 红原县| 时尚| 工布江达县| 灌南县| 怀远县| 汉川市| 启东市| 宣化县| 安丘市| 贵港市| 娄底市| 石首市| 铁岭县| 宜州市| 陇南市|