專利名稱::數據訪問層類生成器的制作方法
技術領域:
:本發(fā)明一般涉及使用存儲過程從數據庫訪問數據,尤其涉及通過分析這樣的存儲過程來自動生成數據訪問層的系統(tǒng)和方法。
背景技術:
:計算機技術的進步(例如,微處理器速度、存儲器容量、數據傳送帶寬、軟件功能等)極大地促進了各個行業(yè)中的計算機應用程序的增長。通常被配置為服務器陣列的功能日益增強的服務器系統(tǒng)通常被提供來例如服務源于諸如萬維網等外部資源的請求。由于可用電子數據的數量的增長,以促進用戶友好且快速的數據搜索和檢索的可管理方式存儲這樣的數據更為重要。當今,常見的方法是在一個或多個數據庫中存儲電子數據。一般而言,典型的數據庫可以被稱為帶有數據的信息的有組織的集合,這些數據被結構化以使計算機程序能夠例如快速地搜索和選取所需的數據片段。傳統(tǒng)上,通過一張或多張表來組織數據庫內的數據,其中各張表含有一組記錄,一個記錄包括一組字段。在表中,記錄通常被索引為行,而記錄字段通常被索引為列,使得索引的行/列對可以引用表中的一個特定數據。目前,世界上極大多數數據庫是基于關系型數據模型的,且訪問通常由SQL(結構化查詢語言)標準的變體主導。SQL是可以被用來詢問和處理關系型數據庫中的數據的語言,且許多公司在SQL兼容的數據庫中維護組織、產品和顧客數據,SQL兼容的數據庫最初被開發(fā)來與大型機結合使用,現在大多數數據庫管理系統(tǒng)(DBMS)一般為支持SQL的客戶機/服務器環(huán)境設計的。數據庫管理系統(tǒng)的主要應用當然是管理數據的存儲、排列和檢索;然而,為了向管理系統(tǒng)提供各種能力,通常希望使用存儲過程或預定義的函數,數據庫管理系統(tǒng)可使用它們來完成提供的功能。數據庫管理員常常使用“存儲過程”來適應查詢搜索,存儲過程是其中僅有小部分(例如,參數)可變的內置查詢。例如,存儲過程可以被定義來標識擁有特定郵政編碼的經營場所的顧客。從而,用戶只需輸入郵政編碼的值來獲取查詢結果。換言之,用戶可以訪問存儲過程并傳遞所需郵政編碼作為標識的參數。通常,使用存儲過程具有多種便利,包括功能封裝、性能增強、客戶機-服務器處理以及安全性。一般而言,存儲過程可以采用任何數量的參數,這些參數在這些過程內定義。存儲過程也可以用于添加、更新信息或從一個或多個數據庫中移除信息。同樣,在數據庫應用程序的開發(fā)過程中,開發(fā)員一般在數據庫中創(chuàng)建存儲過程,然后為應用程序的中間層編寫數據訪問層組件的代碼,應用程序的中間層可以用于調用存儲過程且收集之后可以在被傳遞到中間層的較高層中的調用者的任何結果。創(chuàng)建這樣的數據訪問層的進程涉及復制已存在于數據庫中的各種信息的代碼。然而,由于當復制時可能會引入錯誤或引起維護問題,一般這樣的方法是低效且冗余的。另外,如果對存儲過程的改變沒有伴隨對數據訪問層的類似改變,應用程序將不能正確地操作。而且,精確地確定存儲過程中改變了什么以及更新數據訪問層代碼是既冗長又易于出錯的。從而,存在克服與常規(guī)系統(tǒng)和設備相關聯的前述示例性不足的需求。
發(fā)明內容以下提供了本發(fā)明的簡化概述,以提供對本發(fā)明的一個或多個方面的基本理解。該概述不是本發(fā)明的廣泛概觀。它既不旨在標識本發(fā)明的關鍵或重要的元素,也不描繪本發(fā)明的范圍。相反,該概述的唯一目的是以簡化的形式呈現本發(fā)明的某些概念,作為之后呈現的更詳細描述的序言。本發(fā)明提供根據存儲過程的定義通過數據訪問層生成器為關系型數據庫應用程序的中間層自動生成數據訪問層的系統(tǒng)和方法。這樣的安排促進了關系型數據庫中使用存儲過程的數據訪問。從而,關于數據庫的信息可以被存儲在一個位置中,且降低了這樣的信息與維護在中間層中的信息不同步的風險。根據本發(fā)明的方法,來自可擴展標記語言擴展(XML)配置文件的數據可以由數據訪問層類生成器使用,來確定通常展示給訪問層的存儲過程。作為結果,XML文件可以作為向數據庫描述應用程序編程接口(API)的聲明文件,并提供例如需要向API展示的存儲過程的列表。另外,這樣的XML文件可以提供總體上可能不能從數據庫中容易地訪問到的信息,諸如結果集的名稱(如果存儲過程的確返回這樣的結果集)。結果集也可以含有能夠自動設置的與之相關聯的邏輯主鍵。在相關方面中,XML配置文件也可以含有關于編碼約定的信息,使得參數可以從事務結構化查詢語言(SQL)基礎上轉化為.NET架構。從而,生成的代碼可以恰當地匹配由中間層編程語言使用的編程約定,即使生成的代碼作為基礎的存儲過程使用不同的編程約定。例如,用于基于SQL的存儲過程的參數的命名約定可以不同于通常在中間層編程語言中使用的命名約定?;赬ML配置文件,基于SQL的參數名稱可以被自動地轉化為適用于中間層編程語言的命名約定。例如,本發(fā)明能夠生成能夠定義數據訪問類的C#TM代碼,其中,為獲取可操作的系統(tǒng),中間源文件的剩余部分可以被添加/編譯并部署給服務器。這樣并且基于部署,該系統(tǒng)可以包括數據庫、含有由數據訪問層生成器自動生成的數據訪問層的中間層(數據訪問層可以提供與數據庫的通信,其中中間層支持一般可以提供網絡服務和HTTP服務能力的因特網信息服務(IIS))。用戶然后可以使用web瀏覽器來瀏覽運行服務器端腳本環(huán)境(例如,活動服務器頁面)的web服務器(例如,IIS)主存的網頁,以調用進一步調用數據庫中的數據訪問層和存儲過程的中間層商業(yè)邏輯組件。這樣的存儲過程可以返回結果集和/或可替換地執(zhí)行某些有用的邊際效應(例如,插入、更新或刪除數據)而一般無需返回任何結果集。根據本發(fā)明的又一方法,最初XML配置文件可以被剖析和相關來確定數據訪問層類生成器該如何生成類。這些可以包括,例如將要檢查的數據庫的標識、用于生成結果的總規(guī)范、關于可以通過數據訪問層訪問的存儲過程的信息等。下一步,可以從數據庫中檢索信息,且可以生成可以包括用于事務支持的典型代碼和用于在數據訪問層中打開數據庫的代碼的引導碼。如果存儲過程返回一個或多個結果集(例如,實際返回了數據),那么可以從數據庫中取出關于這樣的存儲過程的元數據。之后可以使用用于調用存儲過程的命令對象生成匹配這些存儲過程的參數的類型的參數。接著,生成的代碼可以創(chuàng)建數據集和數據適配器。數據適配器可以被用來使用調用存儲過程的結果來填充數據集。下一步,可以生成方法頭來返回表示該數據集的值。在無結果集合返回的存儲過程的相關方面中,最初元數據可以從關于存儲過程的數據庫中獲得,且然后可以使用匹配存儲過程的參數類型的參數來生成方法。下一步,生成的方法的主體可以創(chuàng)建用于調用存儲過程的命令對象,且為存儲過程創(chuàng)建匹配從數據庫中獲取的元數據信息的參數。為了完成前述和相關目的,本發(fā)明因此包含之后完全描述的特征。以下描述和附圖詳細描述了本發(fā)明的說明性方面。然而,這些方法僅示出可在其中使用本發(fā)明的原理的多種方式中的一些。當結合附圖考慮閱讀以下本發(fā)明的詳細描述時,本發(fā)明的其它方面、優(yōu)點和新穎特征會變得明顯。圖1示出了根據本發(fā)明的方面自動生成數據訪問層的數據訪問層類生成器。圖2示出了根據本發(fā)明的方面使用可擴展標記(XML)配置文件和數據庫的存儲過程來生成數據訪問層的數據訪問層生成器。圖3a、3b和3c示出了根據本發(fā)明的方面生成數據訪問層類的方法。圖4示出了根據本發(fā)明的方面使用數據訪問層類生成器的部署的系統(tǒng)。圖5示出了根據本發(fā)明的方面作為多層結構中的一部分的與web服務器通信的web瀏覽器,多層結構中可以自動生成數據訪問層。圖6示出了可在其中實現本發(fā)明的各個方面的合適的計算環(huán)境的簡要概括描述。圖7示出了根據本發(fā)明可以使用本發(fā)明的各個方面來生成數據訪問層的客戶機-服務器系統(tǒng)。以下提供的附錄A提供了根據本發(fā)明的方面的XML配置文件的一組特定的示例性模式,該附錄可以被認為是描述本發(fā)明的說明書的一部分。具體實施例方式現在參考附圖描述本發(fā)明,在所有附圖中,相同的參考標號引用相同的元素。在以下描述中,為說明起見,描述多個具體細節(jié)來提供對本發(fā)明全面理解。然而,顯然可以無需這些具體細節(jié)來實現本發(fā)明。在其它情況中,在框圖形式中示出公知的結構和設備以便于描述本發(fā)明。如在本申請中所使用的,術語“組件”、“處理程序”、“模型”、“系統(tǒng)”等指的是計算機相關的實體,或者是硬件、硬件軟件的組合、軟件或者是執(zhí)行中的軟件。例如,組件可以是,但不限于,運行在處理器上的進程、處理器、對象、可執(zhí)行碼、執(zhí)行的線程、程序和/或計算機。作為說明,服務器上運行的應用程序和該服務器都可以是組件。一個或多個組件可以駐留在進程和/或執(zhí)行的線程內,且組件可以位于一臺計算機上和/或在兩臺或更多計算機之間分布。同樣,這些組件可以從其上存儲數據結構的各種計算機可讀介質執(zhí)行。組件可以通過本地和/或遠程進程諸如根據含有一個或多個數據包的信號來通信(例如,來自一個組件的數據與本地系統(tǒng)中、分布式系統(tǒng)中的另一組件通信,和/或跨諸如因特網等網絡通過信號與其它系統(tǒng)交互)。本發(fā)明提供根據存儲過程的定義通過數據訪問層生成器自動生成關系型數據庫應用程序的數據訪問層的系統(tǒng)和方法。這樣的安排能夠促進關系型數據庫中使用存儲過程的數據訪問。而且,關于數據庫的信息可以被存儲在一個位置中,以降低這樣的信息與維護在中間層的信息不同步的風險。換言之,中間層內的數據訪問層可以通過本發(fā)明的數據訪問層生成器自動生成。圖1示出了根據本發(fā)明的方面帶有在中間層125中自動生成數據訪問層130的數據訪問層生成器110的多層客戶機服務器體系結構100。提供了三層物理分層的結構,即客戶機層、中間層以及數據庫層,其中客戶機層104包括用戶工作站、PDA以及可以主存web瀏覽器的其它設備。對面向服務的解決方案而言,該層包括消耗服務的計算機和設備。一般,在這樣的多層排列100中,客戶機應用程序進程表示運行在計算機平臺上的應用程序,其中計算機平臺可以是數據庫服務器的同一計算機平臺,或者它可以是通過諸如通信網絡等某種類型的通信介質連接至服務器的遠程計算機平臺。中間層125一般可以負責主存應用程序商業(yè)組件,且在web應用程序的情形中,也可以主存web服務器。這樣的中間層125可以包括商業(yè)邏輯層127,商業(yè)邏輯層127對通過其來回傳遞的數據執(zhí)行操作,且中間層位于數據層115和客戶機層104中間。層127主要涉及邏輯而不是數據視圖或數據存儲。這樣的安排一般支持可伸縮性且是容錯的,其中應用程序層可以被配置為服務器場,而數據庫層作為服務器群集。客戶機層104可以通過請求帶有或不帶有各種參數的網頁來與關系型數據庫115交互。訪問這些網頁進而調用中間層的商業(yè)邏輯組件。這些商業(yè)邏輯組件然后調用數據訪問層組件,數據訪問層組件又發(fā)出SQL語句,其中SQL語句例如被傳輸給關系型數據庫115。同樣,客戶機104可以間接地發(fā)出可以指令關系型數據庫115執(zhí)行外部預定義的過程中的一個的過程調用。在關系型數據庫115中,大多數數據通常被存儲為一張或多張表中的行。數據庫115可以由具有執(zhí)行表上的相聯查詢的能力的一個或多個實體??梢允褂靡唤M處理語言(例如,結構化查詢語言)來訪問表中存儲的實體組,其中該語言將一張或多張表指定為數據的源,并僅輸出滿足給定條件的那些行(如果有)。數據訪問層生成器110可以自動創(chuàng)建中間層125的數據訪問層130。數據訪問層130可以用于調用數據庫115中的存儲過程,并收集之后被傳遞給中間層125中的較高層的任何結果。圖2示出通過使用可擴展標記(XML)配置文件和數據庫的存儲過程來自動生成數據訪問層的數據訪問層生成器。通常,存儲過程(1到m,其中m為整數)204、206是物理地存儲在數據庫210內的程序(或過程)。這樣的程序通常使用專有的數據語言并響應于用戶請求來編寫,由數據庫引擎直接運行。存儲過程204、206能直接訪問需要操縱的數據,且一般僅需將結果傳回給用戶,這樣減少了來回通信大量信息的開銷。例如,存儲過程204、206的典型用途可以包括集成在數據庫結構中的數據確認(用于該目的存儲過程一般被稱為觸發(fā)器),或者封裝某個大型或復雜的處理(諸如操縱大型數據集來產生概括的結果)。當數據庫210被眾多外部程序操縱時,也可以使用存儲過程206、206。通過使用存儲過程將商業(yè)邏輯嵌入至數據庫210中,減少了對將同一邏輯嵌入至訪問數據的所有程序的需求。這樣可以簡化創(chuàng)建以及尤其是所涉及的程序維護。如圖2中所示,數據訪問層生成器215在XML配置文件205的協(xié)助下可以自動創(chuàng)建數據訪問層類和方法定義220。XML配置文件205可以被剖析和相關來確定數據訪問層類生成器215該如何生成類。這些可以包括,例如將要檢查的數據庫的標識、用于生成結構的總規(guī)范、關于可以通過數據訪問層220訪問的存儲過程的信息等。下一步,可以從數據庫220中檢索信息,且可以生成可以包括用于事務支持的典型代碼和用于打開數據訪問層中的數據庫的代碼的引導碼。XML配置文件205可以確定一般向訪問層展示的存儲過程。從而,XML文件可以作為向數據庫描述應用程序編程接口(API)的聲明文件,并提供例如需要向API展示的存儲過程的列表。另外,這樣的XML文件可以提供一般而言從數據庫難以訪問的信息,諸如結果集的名稱(如果存儲過程實際上確實返回這樣的結果集)。結果集也可以含有可以自動設置的與之相關聯的邏輯主鍵。可以作為配置文件205的一部分的示例性模式在本文檔的末尾呈現,作為附錄A部分。如前所述,這樣的示例性模式可以是例如可以使用XML模式語言的模式構造來定義和描述一類XML文檔的可擴展標記語言(XML)的形式。這些模式構造可以被用來約束和證明如XML文檔中所用的數據類型的意義、用途以及關系,元素及其內容,屬性及其值,實體,內容和符號表示。這樣,一般而言,能夠訪問XML模式的任何計算機系統(tǒng)可以根據XML模式處理XML文檔。而且,一般能夠訪問XML模式的任何計算機系統(tǒng)可以編寫或修改XML文檔來供也能夠訪問XML模式的其它計算機系統(tǒng)使用。模式可以用來定義用于定義數據結構的基本上任何數據類型,包括邏輯、二進制、八進制、十進制、十六進制、整數、浮點、字符、字符串、用戶定義數據類型以及這些數據類型的組合。XML元素和屬性可以被定義來表示由模式定義的數據類型。根據本發(fā)明的一個特定方面的示例性XML模式在下文中作為附錄A部分呈現。在一個相關方面,XML配置文件也可以包含關于編碼約定的信息,使得參數可以從事務SQL基礎轉變?yōu)椤?NET”架構。從而,生成的代碼可以適當地匹配由中間層編程語言使用的編程約定,即使生成的代碼作為基礎的存儲過程使用不同的編程約定。例如,用于基于SQL的存儲過程的參數的命名約定可以與一般用于中間層編程語言的命名約定不同?;赬ML配置文件,基于SQL的參數名可以被自動地轉化為適用于中間層編程語言的命名約定。本發(fā)明可以例如生成能夠定義數據訪問類的C#TM代碼,其中為獲取可操作的系統(tǒng),中間源文件的剩余部分可以被添加/編譯并部署給服務器?,F在參考圖3a,示出了根據本發(fā)明的方面的生成數據訪問層類的示例性方法。盡管該示例性方法此處被示出和描述為表示各種事件和/或動作的一連串框,但是本發(fā)明不受這些框的所示順序的限制。例如,根據本發(fā)明,某些動作或事件可以按照與此處所示的順序不同的順序和/或與其它動作或事件同時發(fā)生。另外,不是所有示出的框、事件或動作對實現根據本發(fā)明的方法都是必需的。而且,可以理解,可以與此處示出和描述的方法聯合,以及與沒有示出和描述的其它系統(tǒng)和裝置聯合來實現根據本發(fā)明的示例性方法和其它方法。最初在310處,可以讀取XML參數文件一般來驅動該進程的剩余部分(一般而言,參數文件必須遵循這些模式,因為它是對照該模式來讀取和確認的)。例如,顧客或用戶提供的XML最初可以被驗證,然后基于XML文件的內容,在320處初始化應用程序階段——其中,信息可以作為由應用程序所操縱的對象來捕捉。下一步,在330處,可以從數據庫中檢索類型信息,包括檢查以下內容例如,數據庫中的存儲過程、可能有益的任何相關的信息類型、以及在對象模型中對這樣的信息的捕捉。接著在340處,生成可以包括事務支持的引導碼。引導碼一般是不論檢查哪個數據庫而生成的,可以包括用于訪問層的某一數量的固定代碼,諸如用于事務支持的代碼和用于打開數據訪問層中的數據庫的協(xié)議。取決于存儲過程是否能產生結果集,本發(fā)明的方法可以分為兩個獨立的方法分支。如果存儲過程返回一個或多個結果集(例如,搜索向用戶顯示的目錄的結果),該方法前進至圖3b。如圖3b中的360所示,可以從數據庫中自動取出關于存儲過程的參數信息。從而,如果準確地表示了存儲過程,那么可以自動收集適當的參數信息。下一步,在362處,可以將屬性例如從存儲過程名稱映射到面向對象的編程名稱(例如,C#TM名稱)。接著在364處,輸出可以證明該過程調用了類中的存儲過程的注釋。該方法然后前進至366處,在那里可以使用能表示數據集的返回值來生成方法頭。下一步在368處,可以生成代碼來創(chuàng)建使用合適的參數調用特定的存儲過程的命令。換言之,之前從數據庫中取出的類型信息可以與來自參數文件的信息結合來生成調用返回結果集的特定存儲過程的方法。該方法然后前進至370處,在那里可以生成使用調用存儲過程的結果來填充數據集的代碼,以從數據庫中獲取數據。而且,如果在參數文件中存在與基于針對數據庫執(zhí)行的查詢的輸出來創(chuàng)建的邏輯表相關聯的邏輯主鍵,那么在372處可以生成支持此的代碼。這樣的代碼可以促進創(chuàng)建和/或維護中間層中的數據的完整性。同樣,如果除了返回的結果集之外,還存在返回的輸出參數的任何具體值,那么可以在374處,生成用于捕捉和返回這樣的值的代碼。該方法然后可以返回至圖3a,并檢查將要生成的更多結果集存儲過程?;蛘撸绻鎯^程在圖3a的356處沒有返回結果集(例如,創(chuàng)建顧客或插入名稱),那么該方法前進至圖3c。如圖3c的371處所示,可以從數據庫中自動取出關于存儲過程的參數信息。下一步,在373處,可以將屬性例如從存儲過程名稱映射到面向對象的編程名稱(例如,C#TM名稱)。接著在375處,輸出可以證明該過程調用了類中的存儲過程的注釋。該方法然后前進至377處,在那里,因為返回值為空,可以生成方法頭而不使用返回值。下一步在379處,可以生成代碼來創(chuàng)建使用合適的參數調用特定的存儲過程的命令。同樣,如果存在返回的輸出參數的任何具體值,那么可以在381處,生成用于捕捉和返回這樣的值的代碼。該方法然后可以返回來檢查要生成的更多無結果的集合的存儲過程。例如,對以SQL使用數據庫的金融應用程序而言,可以編寫存儲過程用于以SQL來創(chuàng)建帳戶和更新關于現有帳戶的信息。這樣的數據庫一般可以根據表和列來定義,其中表之間的關系可以構成關系型數據庫的邏輯組件。邏輯組件可以容易地表示數據庫的語義,便于數據庫映射至另一數據模型等。同樣,數據庫表可以被轉化為XML文檔,且可以將XML工具用于這些文檔來對財政應用程序進行進一步處理。在這樣的數據庫環(huán)境中,用于創(chuàng)建或更新帳戶的存儲過程一般可以被認為是無結果集的存儲過程。例如,在用于創(chuàng)建帳戶的存儲過程的情形中,可以返回帶有顧客ID而不帶有結果集表的輸出參數,其中數據訪問層類生成器可以消除改寫諸如可以調用存儲過程的中間層的C#TM源代碼等的代碼或信息的需求。這樣,嵌入在類的方法定義中的可以是關于參數的順序、名稱、類型和大小的信息,其中確切的采樣信息也可以是存儲過程定義的一部分。當金融應用程序的要求改變時,處理透支保護帳戶的應用程序可能成為必需,或者帳戶創(chuàng)建和帳戶更新存儲過程一般需要被修改來包含諸如透支限額等另一參數。本發(fā)明可以消除或減少手動更新數據訪問層C#TM代碼的需求,在更新中,存儲過程與中間層之間的參數數量、類型或大小的任何變化可能會引起錯誤。這樣,通過使用本發(fā)明的數據訪問層類生成器,一般僅需包括改變作為存儲過程的定義的一部分。數據訪問層類然后可以被重新生成,產生與最近的存儲過程定義相兼容的組件的新的版本。這樣可以極大地減少使用成百甚至成千個存儲過程來更新應用程序所需的工作。圖4示出了根據本發(fā)明的一方面的部署的系統(tǒng),其中系統(tǒng)400可以包括數據庫410、帶有由數據訪問層生成器自動生成的數據訪問層415的中間層420。這樣的數據訪問層415可以提供與數據庫410的通信,其中中間層420支持實現web服務的基于因特網信息服務(IIS)的web應用程序以及服務器端web用戶界面組件430、440。用戶然后可以使用web瀏覽器來瀏覽由web服務器(例如,IIS)提供的網頁,該web服務器可以訪問中間層中的商業(yè)邏輯組件,商業(yè)邏輯組件又可以調用數據訪問層415中的組件,來召喚數據庫410中的存儲過程。這些存儲過程可以返回結果集和/或可替換地提供無結果的集合。現在參考圖5,示出了作為多層結構中的一部分與web服務器通信的web瀏覽器,其中可以如前詳細描述的自動生成數據訪問層。運行在客戶機520上的是諸如web瀏覽器510等的客戶機進程,運行在服務器550上的是相應的服務器進程,例如web服務器560。另外,根據本發(fā)明的各個方面,嵌入在web瀏覽器510中的可以是腳本或應用程序530,運行在客戶計算機520的運行時環(huán)境550內的可以是用于打包或解包格式化的數據包的代理515。與服務器550通信的是數據庫管理系統(tǒng)(DBMS)580,它管理對數據庫(未示出)的訪問。DBMS580以及數據庫(未示出)可以位于服務器自身內,或可以遠程地位于遠程數據庫服務器(未示出)上。運行在web服務器560上的是數據庫接口應用程序編程接口(API)570,它提供對DBMS580的訪問。如前所述,XML配置文件可以確定一般向訪問層展示的存儲過程。從而,XML文件例如可以作為向數據庫描述API570的聲明文件,并提供需要向API展示的存儲過程的列表??蛻粲嬎銠C520和服務器計算機550可以通過網絡590彼此通信。當例如web瀏覽器510等的客戶機進程從數據庫中請求數據時,腳本或應用程序530發(fā)出通過網絡(例如,因特網)590向服務器計算機550發(fā)送的查詢,然后在服務器計算機550處,由服務器進程,例如web服務器560解釋該查詢。客戶機520對服務器550的請求可以包括多條命令,且來自服務器550的響應可以返回多個結果集。返回的對客戶機命令的響應可以是自描述的,且是面向記錄的(例如,數據流可以描述名稱、類型以及所返回的行的可任選描述)。同樣,生成的代碼可以恰當地匹配由中間層編程語言所使用的編程約定,即使生成的代碼作為基礎的存儲過程使用不同的編程約定。例如,用于基于SQL的存儲過程的參數的命名約定有可能不同于一般用于中間層編程語言中的那些命名約定?;赬ML配置文件,基于SQL的參數名可以被自動轉化為適用于中間層編程語言的命名約定。本發(fā)明可以例如生成能夠定義數據訪問類的C#TM代碼,其中為獲取操作系統(tǒng),中間資源文件的剩余部分可以向服務器添加/編譯和部署?,F在參考圖6,示出了可在其中實現本發(fā)明的各個方面的合適的計算環(huán)境的簡要概括描述。盡管上文中在運行在一臺或多臺計算機上的計算機程序的計算機可執(zhí)行指令的通用語境中描述了本發(fā)明,但本領域的技術人員可以認識到,本發(fā)明也可以結合其它程序模塊來實現。一般而言,程序模塊包括例程、程序、組件、數據結構等,它們執(zhí)行特定的任務和/或實現特定的抽象數據類型。而且,本領域的技術人員可以理解,該創(chuàng)造性方法可以使用其它計算機系統(tǒng)配置實現,包括單處理器或多處理器計算機系統(tǒng)、小型計算機、大型機、以及個人計算機、手持式計算設備、基于微處理器或可編程消費者電子產品等。如前所述,本發(fā)明所示出的各方面也可以在分布式計算環(huán)境中實現,其中任務由通過通信網絡連接的遠程處理設備執(zhí)行。然而,本發(fā)明即使不是全部,也有某些方法可以在獨立計算機上實現。在分布式計算環(huán)境中,程序模塊可以位于本地和遠程存儲器存儲設備中。該示例性環(huán)境包括計算機620,它包含處理單元621、系統(tǒng)存儲器622以及將包括系統(tǒng)存儲器在內的各種系統(tǒng)組件耦合至處理單元621的系統(tǒng)總線623。處理單元可以是任何各種可在市場上購買到的處理器。雙微處理器和其它多處理器體系結構也可被用作處理單元621。系統(tǒng)總線可以是若干類型的總線結構中的任一種,包括存儲器總線或存儲器控制器、外圍總線和使用各種市場上供應的總線體系結構中的任一種的局部總線。系統(tǒng)存儲器可以包括只讀存儲器(ROM)624和隨機存取存儲器(RAM)625?;据斎?輸出系統(tǒng)(BIOS)包含有助于諸如啟動時在計算機620中元件之間傳遞信息的基本例程,它通常存儲在ROM624中。計算機620還包括硬盤驅動器627、磁盤驅動器628(例如從可移動磁盤629中讀取或向其寫入)以及光盤驅動器630(例如,從CD-ROM盤631中讀取或向其寫入,或者從其它光學介質中讀取或向其寫入)。硬盤驅動器627、磁盤驅動器628以及光盤驅動器630分別通過硬盤驅動器接口632、磁盤驅動器接口633以及光盤驅動器接口634連接至系統(tǒng)總線623。驅動器及其相關聯的計算機可讀介質為計算機620提供了對數據、數據結構、計算機可執(zhí)行指令等的存儲。盡管以上對計算機可讀介質的描述涉及硬盤、可移動磁盤和CD,但本領域的技術人員應該理解,計算機可讀的其它類型的介質,諸如盒式磁帶、閃存卡、數字多功能盤、貝努利盒式磁帶等,也可以用于示例性環(huán)境中,而且任何這樣的介質可以包含用于執(zhí)行本發(fā)明的方法的計算機可執(zhí)行指令。多個程序模塊可以被存儲在驅動器和RAM625中,程序模塊包括操作系統(tǒng)635、一個或多個應用程序636、其它程序模塊637以及程序數據638。示出的計算機中的操作系統(tǒng)635可以是基本上任何市場上供應的操作系統(tǒng)。用戶可以通過鍵盤640和諸如鼠標642等定點設備向計算機620中輸入命令和信息。其它輸入設備(未示出)可以包括麥克風、操縱桿、游戲墊、圓盤式衛(wèi)星天線、掃描儀等。這些和其它輸入設備通常由耦合至系統(tǒng)總線的串行端口接口646連接至處理單元621,但也可以由其它接口,諸如并行端口、游戲端口或通用串行總線(USB)連接。監(jiān)視器647或其它類型的顯示設備也經由接口,諸如視頻接口648連接至系統(tǒng)總線623,且使用如上詳細描述的本發(fā)明的各個方面。除監(jiān)視器以外,計算機也可以包括其它外圍輸出設備(未示出),諸如揚聲器和打印機。監(jiān)視器的電源可以通過與其相關聯的燃料電池和/或蓄電池來供應。計算機620可使用至一臺或多臺遠程計算機,諸如遠程計算機649的邏輯連接在網絡化環(huán)境中操作。遠程計算機649可以是工作站、服務器計算機、路由器、網絡PC、對等設備或其它常見網絡節(jié)點,且通常包括上文相對于計算機620描述的許多或所有元件,盡管在圖6中只示出存儲器存儲設備650。圖6中所示邏輯連接包括局域網(LAN)651和廣域網(WAN)652,但也可以包括其它網絡。這樣的網絡環(huán)境在辦公室、企業(yè)范圍計算機網絡、內聯網和因特網中是常見的。當在LAN網絡環(huán)境中使用時,計算機620可以通過網絡接口或適配器653連接至局域網651。當在WAN網絡環(huán)境中使用時,計算機620通常包括調制解調器654,和/或被連接至LAN上的通信服務器,和/或具有用于通過諸如因特網等廣域網652建立通信的其它裝置。調制解調器654可以是內置或外置的,它可以通過串行端口接口646被連接至系統(tǒng)總線623。在網絡化環(huán)境中,相對于計算機620所描述的程序模塊或其部分可以存儲在遠程存儲器存儲設備中。可以理解,所示的網絡連接是示例性的,且可以使用在計算機之間建立通信鏈路的其它手段。根據計算機編程領域的技術人員的實踐,本發(fā)明是參考由諸如計算機620等的計算機所執(zhí)行的動作和操作的符號表示來描述的,除非以其它方式指出。這樣的動作和操作有時候被稱為計算機執(zhí)行的??梢岳斫猓瑒幼骱头柋硎镜牟僮靼ㄓ商幚韱卧?21對表示數據位的電子信號的操縱,該操縱引起電子信號表示的結果引起的變化或減少;以及在存儲器系統(tǒng)(包括系統(tǒng)存儲器622、硬盤驅動器627、軟盤628以及CD-ROM631)中的存儲單元處對數據位的維護,借此重新配置或以其它方式更改計算機系統(tǒng)的操作和對信號的其它處理。其中維護這樣的數據位的存儲單元是具有對應于該數據位的特定電子、磁性或光學性質的物理位置?,F在參考圖7,示出了可以使用用于在客戶機或服務器端上無線顯示的本發(fā)明各個方面的服務器系統(tǒng)700??蛻魴C720可以是硬件和/或軟件(例如,線程、進程、計算設備)。系統(tǒng)700也可以包括一個或多個服務器740。服務器740也可以是硬件和/或軟件(例如,線程、進程、計算設備)??蛻魴C720和服務器740可以按根據本發(fā)明的傳輸的數據包的形式在兩個或多個計算機進程之間通信。如所示,系統(tǒng)700包括可以促進客戶機720和服務器740之間和/或各自顯示監(jiān)視器之間的通信的通信架構780??蛻魴C720操作上連接至可以存儲對客戶機720本地的信息的一個或多個客戶機數據存儲。而且,客戶機720可以訪問和更新位于運行服務器進程的服務器計算機740上的數據庫760。在本發(fā)明的一個方面中,通信架構780可以是因特網,而客戶機進程為web瀏覽器,服務器進程為web服務器。同樣,典型的客戶機720可以是通用計算機,諸如含有中央處理器(CPU)、系統(tǒng)存儲器、用于將個人計算機連接至因特網的調制解調器或網卡和顯示器,以及諸如鍵盤、鼠標等的其它組件。同樣,典型的服務器740可以是大學或公司大型機,或專用的工作站等。以下提供根據本發(fā)明為配置文件提供示例的樣本XML模式,作為附錄A部分,且該附錄被認為是描述本發(fā)明的本說明書的一部分。而且,盡管本發(fā)明是參考某些示出的方面來示出和描述的,但可以理解,在閱讀和理解本說明書和附圖之后,本領域的技術人員可以想到等效的更改和修改。尤其對于由上述組件(程序集、設備、電路、系統(tǒng)等)執(zhí)行的各個功能,除非以其它方式指示,否則用于描述這樣的組件的術語(包括對“裝置”的引用)旨在對應于執(zhí)行所述組件的指定功能的任何組件(例如,功能等效的組件),即使在結構上與執(zhí)行本發(fā)明此處所示的示例性方面的功能的所揭示的結構不同。在這一點上,也可以認識到,本發(fā)明包含系統(tǒng),以及含有用于執(zhí)行本發(fā)明的各個方面的動作和/或事件的計算機可執(zhí)行指令的計算機可讀介質。而且,就術語“包括”、“包含”、“具有”、“擁有”以及其變化在詳細描述中或者在權利要求書中所使用的意義上而言,這些術語旨在以類似于術語“含有”的方式為包括性的。附錄A<?xmlversion=″1.0″?><xsschematargetNamespace=″http//schemas.microsoft.com/SqlServer/DataAccessClass″xmlnsxs=″http//www.w3.org/2001/XMLSchema″elementFormDefault=″qualified″attributeFormDefault=″unqualified″><xselementname=″parameters″><xscomplexType><xssequence><xselementname=″connectionString″><xscomplexType><xsattributename=″value″type=″xsstring″use=″required″/></xscomplexType></xselement><xselementname=″handcodedSprocs″minOccurs=″0″><xscomplexType><xsattributename=″file″type=″xsstring″use=″required″/></xscomplexType></xselement><xselementname=″prefixToRemove″minOccurs=″0″><xscomplexType><xssequence><xselementname=″sprocNamePrefix″type=″xsstring″minOccurs=″0″maxOccurs=″unbounded″/><xselementname=″sprocArgPrefix″type=″xsstring″minOccurs=″0″maxOccurs=″unbounded″/></xssequence><xsattributename=″isSprocArgInitialLowerCase″type=″xsboolean″/></xscomplexType></xselement><xselementname=″timeout″><xscomplexType><xsattributename=″command″type=″xsstring″use=″required″/></xscomplexType></xselement><xselementname=″output″><xscomplexType><xssequence><xselementname=″using″type=″xsstring″maxOccurs=″unbounded″/></xssequence><xsattributename=″file″type=″xsstring″use=″required″/><xsattributename=″namespace″type=″xsstring″use=″required″/><xsattributename=″class″type=″xsstring″use=″required″/></xscomplexType></xselement><xschoiceminOccurs=″0″maxOccurs=″unbounded″><xselementname=″dsSproc″><xscomplexType><xssequence><xselementname=″table″maxOccurs=″unbounded″><xscomplexType><xssequence><xselementname=″primaryKey″minOccurs=″0″maxOccurs=″unbounded″><xscomplexTypemixed=″true″><xsattributename=″fixupType″type=″xsstring″/></xscomplexType></xselement></xssequence><xsattributename=″name″type=″xsstring″use=″required″/></xscomplexType></xselement></xssequence><xsattributename=″name″type=″xsstring″use=″required″/><xsattributename=″schema″type=″xsstring″use=″optional″default=″dbo″/></xscomplexType></xselement><xselementname=″ndsSproc″minOccurs=″0″maxOccurs=″unbounded″><xscomplexType><xsattributename=″name″type=″xsstring″use=″required″/><xsattributename=″schema″type=″xsstring″default=″dbo″/></xscomplexType></xselement></xschoice></xssequence></xscomplexType></xselement></xsschema>權利要求1.一種促進對數據庫的數據訪問的系統(tǒng),包括基于配置文件和數據庫中的存儲過程自動生成數據訪問層的生成器;以及使用所述數據訪問層來訪問所述數據庫的中間層組件。2.如權利要求1所述的系統(tǒng),其特征在于,所述配置文件是用作描述應用程序編程接口(API)的聲明文件的可擴展標記語言(XML)文件。3.如權利要求2所述的系統(tǒng),其特征在于,所述XML配置還包括將參數從事務結構化查詢語言(SQL)基礎轉化為.NET架構的編碼約定。4.如權利要求3所述的系統(tǒng),其特征在于,還包括對SQL和.NET架構之間的差距建立連接的代碼。5.如權利要求4所述的系統(tǒng),其特征在于,所述代碼是C#TM代碼。6.一種訪問數據庫的方法,包括由數據類生成器剖析XML配置文件;將所述文件中的數據與存儲在所述數據庫中的存儲過程協(xié)調;以及由所述數據類生成器自動生成中間層的數據訪問層。7.如權利要求6所述的方法,其特征在于,還包括訪問所述數據庫中間層。8.如權利要求6所述的方法,其特征在于,還包括生成代碼來創(chuàng)建調用所述數據庫中的存儲過程的命令。9.如權利要求6所述的方法,其特征在于,還包括從所述數據庫中為所述存儲過程自動取回參數命令。10.如權利要求6所述的方法,其特征在于,還包括輸出證明調用存儲過程的過程的注釋。11.如權利要求6所述的方法,其特征在于,還包括為所述數據訪問層定義數據訪問類。12.如權利要求6所述的方法,其特征在于,還包括保留來自所述數據庫的結果集和無結果的集合中的一個。13.如權利要求6所述的方法,其特征在于,還包括創(chuàng)建引導碼。14.如權利要求13所述的方法,其特征在于,還包括將存儲過程名映射至面向對象的編程名稱。15.如權利要求6所述的方法,其特征在于,還包括捕捉與從所述存儲過程調用得到的輸出參數相關聯的參數。16.如權利要求15所述的方法,其特征在于,還包括將所述捕捉到的參數傳遞給客戶機層。17.一種促進數據訪問的系統(tǒng),包括用于基于配置文件和數據庫中的存儲過程來生成數據訪問層的裝置;以及用于訪問所述數據庫的裝置。18.如權利要求17所述的系統(tǒng),其特征在于,還包括用于描述應用程序編程接口的裝置。19.如權利要求17所述的系統(tǒng),其特征在于,還包括用于將參數從事務結構化查詢語言(SQL)基礎轉化為.NET架構的裝置。20.如權利要求17所述的系統(tǒng),其特征在于,還包括用于對SQL和.NET架構之間的差距建立連接的裝置。全文摘要通過數據訪問層生成器,為具有存儲過程的關系型數據存儲的中間層自動生成數據訪問層的系統(tǒng)和方法。數據訪問層生成器可以使用可擴展標記語言擴展(XML)來確定通常向訪問層展示的存儲過程。這樣的安排可以促進關系型數據庫中使用存儲過程的數據訪問。而且,關于數據庫的信息可以存儲在一個位置中,來降低這樣的信息與維護在中間層的信息不同步的風險。文檔編號G06F17/30GK1804840SQ20051013703公開日2006年7月19日申請日期2005年12月12日優(yōu)先權日2005年1月12日發(fā)明者B·N·范伯格申請人:微軟公司