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

首頁 > 學院 > 開發設計 > 正文

從.NET應用程序訪問MicrosoftOffice數據

2019-11-18 15:17:23
字體:
來源:轉載
供稿:網友

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汉源县| 江都市| 绵阳市| 青海省| 凤凰县| 德兴市| 无锡市| 麻阳| 广平县| 延津县| 舞钢市| 东阿县| 田林县| 县级市| 石门县| 兴山县| 连城县| 米脂县| 阜南县| 礼泉县| 油尖旺区| 铜梁县| 锡林浩特市| 合山市| 左贡县| 青河县| 明星| 凤城市| 东丰县| 来宾市| 漳州市| 营口市| 九寨沟县| 全州县| 阜新市| 周宁县| 镇江市| 罗城| 黄石市| 彩票| 乳源|