㈠ 請介紹一下ADO.NET框架下幾種資料庫訪問技術的優缺點。詳細一點
數據源控制項訪問資料庫:簡單快捷,但是真正的開發中不會去這樣用的,因為1是效率問題2是靈活性不足,這就跟ASP.NET裡面的其他控制項一樣,正的要做大應用是不會用這種東西的,因為擴展性不足,或者為了做到兼容性損失了效率。 使用.NET數據提供程序訪問資料庫:共有4種,SQL Server .NET Framework數據提供程序,OLEDB .NET Framework數據提供程序,ODBC .NET Framework數據提供程序,Oracle .NET Framework數據提供程序。看名字也該明白,針對不同的資料庫使用不同的數據提供程序,這是開發中最經常使用的方式,缺點是米有辦法應對多資料庫的情況,也就是說假如你的應用是面向多資料庫的,那麼有幾種資料庫,基本要寫幾套SQL。 用DATASet:恭喜你不用寫T-SQL了,但是你要學會它的語法,從此不用擔心多資料庫應用的問題。但是慘了,它為了兼容多種資料庫因此T-SQL寫的真的「很兼容」執行效率太低,同樣的一個表現結果,這個SQL嵌套了好幾次,效率灰常低。 LINQ to SQL:老實講,他就是為SQL SERVER而生的,你也不用寫T-SQL了,它的語法學學還是好處頗多,因因為你在LINQ TO OBJECT上也能見到這種語法的影子收益頗多,它的執行效率很快,但是不管怎麼講也沒有你直接用SQL Server .NET Framework數據提供程序,自己寫SQL快,可控製程度高,好處也是顯而易見就像用DATASET一樣,你不用再為了數據持久化問題寫一大堆ORM的東西了。 by the way,目前.NET中,ORM用的比較多的是Nhibernate,但是你如果就想用SQL SERVER還是用LINQ to SQL吧,好處顯而易見,在開發過程中對於資料庫的變更也是比較常見的,你的資料庫欄位不知道會出現在哪個類,哪個文件中,如果用了DATASET,或LINQ2SQL在編譯階段你就可以察覺到這種變更帶來的影響。
㈡ 資料庫訪問技術分那些類別啊急求
隨著資料庫產品和技術的發展,資料庫訪問技術也從ODBC、DAO、RDO、OLE DB、ADO 和 RDS發展到今天的ADO.NET。以下內容由城市刀客整理編輯,旨在為你展示資料庫訪問技術的概貌。
<!--[if !supportEmptyParas]-->
ODBC<!--[endif]-->
ODBC 技術為訪問不同的SQL 資料庫提供了一個共同的介面。ODBC 使用 SQL 作為訪問數據的標准。這一介面提供了最大限度的互操作性:一個應用程序可以通過共同的一組代碼訪問不同的 SQL 資料庫管理系統 (DBMS)。開發人員可以添加資料庫驅動程序,將應用程序與用戶所選的 DBMS 聯系起來。驅動程序管理器提供應用程序與資料庫之間的中間鏈接。ODBC 介麵包含一系列功能,由每個 DBMS 的驅動程序實現。當應用程序改變它的 DBMS 時,開發人員只使用新的 DBMS 驅動程序替代舊的驅動程序,並且應用程序可以無需修改代碼照常運行。
<!--[if !supportEmptyParas]-->
標准 ODBC 結構的關系圖如下:
DAO & RDO
DAO 是建立在 Microsoft Jet Microsoft Access 的資料庫引擎基礎之上的。Jet 是第一個連接到 Access 的面向對象的介面。使用 Access 的應用程序可以用 DAO 直接訪問資料庫。由於 DAO 是嚴格按照 Access 建模的,因此,使用 DAO 是連接 Access 資料庫最快速、最有效的方法。DAO 也可以連接到非 Access 資料庫,例如,SQL Server 和 Oracle。DAO 使用 ODBC,但是由於 DAO 是專門設計用來與 Jet 引擎對話的,Jet 將解釋 DAO 和 ODBC 之間的調用。使用除 Access 之外的資料庫時,這種額外的解釋步驟導致較慢的連接速度。如下圖所示:
<!--[if !supportEmptyParas]--> <!--[endif]-->
要克服這樣的限制,Microsoft 創建了 RDO。圖 Application1 顯示了 RDO 如何直接訪問 ODBC API,而無需通過 Jet 引擎。不久之後,Microsoft 推出了 ODBCDirect,它是 DAO 的擴展,在後台使用 RDO。圖 Application2 顯示 ODBCDirect 如何允許現有的 DAO 應用程序訪問資料庫,而沒有 Jet 引擎產生的性能損失。
OLE DB
OLE DB 建立於 ODBC 之上,並將此技術擴展為提供更高級數據訪問介面的組件結構。此結構對企業中及 Internet 上的 SQL、非 SQL 和非結構化數據源提供一致的訪問。(實際上,在訪問基於 SQL 的數據時,OLE DB 仍使用 ODBC,因為對於 SQL 它是最優結構。)
OLE DB 由三個組件構成:數據使用者(例如,一個應用程序);包含並公開數據的數據提供程序以及處理並傳輸數據的服務組件(例如,查詢處理器、游標引擎)。OLE DB 是一個針對 SQL 數據源和非 SQL 數據源(例如,郵件和目錄)進行操作的 API。如下圖所示:
OLE DB 為 C 和 C++ 程序員及使用其他包含 C 樣式函數調用語言的程序員提供綁定。有一些語言(例如 VB 和 VBScript)不提供指針數據類型(地址變數)。因此,這些語言不能使用 C 樣式綁定,而且不能直接調用 OLE DB。<!--[if !supportEmptyParas]--> <!--[endif]-->
在此基礎上,Microsoft 推出了另一個數據訪問對象模型:ADO。ADO 採用基於 DAO 和 RDO 的對象,並提供比 DAO 和 RDO 更簡單的對象模型(盡管會產生一些冗餘的功能,如現在進行一項操作時可以用不止一種方法)。ADO 中的對象層次結構比 DAO 中的更平緩。ADO 包含一些簡化對數據存儲區數據的訪問任務的內置對象。
<!--[if !supportEmptyParas]-->
下圖顯示了應用程序連接到資料庫可採取的許多途徑。例如,VB 程序員可以使用 ADO 將應用程序連接到 OLE DB 提供程序。如果資料庫不支持 OLE DB,應用程序可以通過 ODBC 連接。Visual C++ (VC++) 程序員可以使用 ADO 或直接通過 OLE DB 連接。
讓我們看一個簡單示例,它顯示 ADO 是如何運行的。清單 1 顯示可如何使用典型的記錄集對象--ADO 中的核心對象。記錄集對象表示一系列記錄(很像一個表),並支持游標類型,例如,adOpenForwardOnly、adOpenKeyset、adOpenDynamic 和 adOpenStatic。游標可以在伺服器端(默認情況下),也可在客戶端。<!--[if !supportEmptyParas]--> <!--[endif]-->
清單 1
<!--#include file="adovbs.inc"-->
<%
Dim connStr, rs
connStr = "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=pubs;Data Source=localhost"
SET rs= Server.CreateObject("ADODB.Recordset")
<!--[if !supportEmptyParas]-->rs.Open "Authors", connStr, adOpenForwardOnly, adLockOptimistic, adCmdTable
WHILE NOT rs.EOF
response.write rs("au_fname") & "," & rs("au_lname") & "<br>"
rs.moveNext
END
SET rs=nothing
%>
<!--[if !supportEmptyParas]-->
要訪問一條記錄,ADO 需要按順序掃描記錄集。要訪問多個表,需要執行 JOIN 查詢,並將返回的結果作為記錄集。雖然記錄集對象支持斷開的數據訪問,ADO 還是主要為連接的數據訪問而設計。這種連接的訪問模式佔用伺服器端的重要資源。另外,要傳輸記錄集,必須使用 COM 封送處理。COM 封送處理是數據類型轉換過程,這種轉換佔用額外的系統資源。<!--[if !supportEmptyParas]--> <!--[endif]-->
從 ADO 2.1 開始,Microsoft 將 XML 支持添加到 ADO 對象模型,這樣就可將記錄集保存為 XML 文檔。然而,直到 ADO 2.5 出現,ADO 2.1 中 XML 支持的一些限制(例如,分層記錄集對象的保持)才被取消。雖然 ADO 可以將 XML 文檔讀入記錄集,但它只能讀取名為高級數據表圖 (Advanced Data TableGram, ADTG) 的專用架構。<!--[if !supportEmptyParas]--> <!--[endif]-->
Microsoft 希望擁有斷開的數據訪問機制,它擴展了 ADO 並推出遠程數據服務 (RDS)。RDS 是按照 ADO 建模的,無需實時連接就可以使記錄集傳輸到客戶端(例如,Web 瀏覽器)。然而,如同 ADO 一樣,RDS 使用 COM 封送處理將記錄集從伺服器傳輸到客戶端。
ADO.NET
在開始設計 .NET 框架時,Microsoft 就以此為契機重新設計了數據訪問模型。Microsoft 沒有進一步擴展 ADO,而是決定設計一個新的數據訪問框架,但保留了縮寫詞。Microsoft 根據其成功的 ADO 對象模型經驗設計了 ADO.NET。但 ADO.NET 滿足了 ADO 無法滿足的三個重要需求:提供了斷開的數據訪問模型,這對 Web 環境至關重要;提供了與 XML 的緊密集成;還提供了與 .NET 框架的無縫集成(例如,兼容基類庫類型系統)。
下圖顯示了 ADO.NET 的結構。但缺少了能夠在 ADO 中執行諸多功能的記錄集對象。ADO.NET 具有幾個專用對象以執行特定任務,用於代替記錄集對象。表 1 描述了其中的三個專用對象:DataAdapter、DataReader 和 Dataset。
表一:
DataAdapter The DataAdapter object provides a bridge between the database and a DataSet. The key advantage of DataAdapter is that it can work with any data source. The data source might be a database or it might be an XML document.
//DataAdapter提供了一個資料庫與DataSet之間的橋梁。它最大的優點在於能工作於不同的數據源,這些數據源可以是資料庫,也可以是 XML文件。
DataReader The DataReader object provides an efficient way to retrieve records on the server side. DataReader is a connected, read-only, and forward-only data-access mode. This object is useful for Web applications, which use DataReader to display records on Web pages.
//DataReader對象提供了從伺服器端高效獲取數據的途徑,它是在只讀和只進的連接模式下從數據源讀取數據的,這個對象對通過網頁展示數據記錄的Web應用程序開發很有用。
DataSet The DataSet object provides disconnected copies of records from a database. The DataSet object stores records from a table (or multiple tables) in memory without holding a connection to the server. When in memory, DataSet is a binary object. When the DataSet is remoted, transferred, or serialized, it''s represented as a DiffGram—an XML format. Because XML is plaintext, records can be exchanged easily over the Web, bypassing firewall restrictions(限制性). DataSet also contains various objects—such as constraints(壓縮), relationships, and views—that let you manipulate(操作) tables on the client side instead of working through one Recordset in ADO.
//DataSet對象在斷開資料庫連接的情況下提供了一個資料庫內容的拷貝,它把記錄從表中取出,以二進制對象的形式存放在內存中。當Dataset被調用的時候,它表現為DiffGram--一種XML格式。
㈢ VB訪問SQLServer資料庫技術全揭密
本文討論了Visual Basic應用程序訪問SQL Server資料庫的幾種常用的方法,分別說明了每種方法的內部機理並給出了每種方法的一個簡單的實例,最後比較了每種方法性能和優缺點。
一、引言
SQL Server是微軟推出的中小型網路資料庫系統,是目前最常用的資料庫系統之一。隨著SQL Server網路資料庫應用程序日益增多,這種Web資料庫應用系統的正常運行一般依賴於已存在的用戶資料庫。創建維護資料庫的工作可用SQL Server提供的SQL EntERPrise Manager工具來進行,如能提供一種定製的資料庫管理工具,通過管理應用程序來管理資料庫及其者大設備,對用戶來說無疑是最理想的。
Visual Basic作為一種面向對象的可視化編程工具,具有簡單易學,靈活方便和易於擴充的特點。而且Microsoft為其提供了與SQL Server通信的API函數集及工具集,因此它越來越多地用作大型公司數據和客戶機—伺服器應用程序的前端,與後端的Microsoft SQL Server相結合,VB能夠提供一個高性能的客戶機—伺服器方案。
二、VB訪問SQL Server數據的常用方法
使用Visual Basic作為前端開發語言,與SQL Server介面有幾種常用的方法,即:
①數據訪問對象/Jet
②為ODBC API編程
州嫌慧③使用SQL Server的Visual Basic庫(VBSQL)為DB庫的API編程
④RDO 遠程數據對象(RemoteData Objects)
⑤ADO 數據對象(Active Data Objects)
1、數據訪問對象/Jet
VB支持Data Access Objects(DAOs)的子集。DAO的方法雖然不是性能的管理客戶機—伺服器之間的對話方式,但它的確有許多優點。DAO/Jet是為了實現從VB訪問Access資料庫而開發的程序介面對象。使用DAOs訪問SQL Server的過程如下:應用程序准備好語句並送至Jet,Jet引擎(MASJT200.DLL)優化查詢,載入驅動程序管理器並與之通訊,驅動程序管理器(ODBC.DLL)通過調用驅動器(SQLSRVR.DLL)的函數,實現連接到數據源,翻譯並向SQL Server提交SQL語句且返回結果。下面是一個用DAOs訪問SQL Server的VB實例。
注釋:Form Declarations
Dim mydb As Database
Dim mydynaset As Dynaset オ
Private Sub Form_Load()
Set mydb = OpenDatabase("", False, False, "ODBC; DSN=Myserver; WSID=LCL; DATABASE = sales")
Set mydynaset = mydb CreateDynaset("Select*from Customers") オ
End Sub ァ
上述例子是以非獨占、非只讀方式打開sales資料庫,並檢索Customers表中的所有欄位。OpenDatabase函數的最後一個參數是ODBC連接字元串參數,它指明了Microsoft Access連接到SQL Server所需要知道的一些內容。其中「DSN」為數據源名,「WSID」為工作站名,「DATABASE」冊答為所要訪問的資料庫名。
2、利用ODBC API編程
ODBC(Open Database Connectivity)的思想是訪問異種資料庫的一種可移植的方式。與數據資源對話的公用函數組裝在一個稱為驅動程序管理器(ODBC.DLL)的動態連接中。應用程序調用驅動程序管理器中的函數,而驅動程序管理器反過來通過驅動器(SQLSRVR.DLL)把它們送到伺服器中。
下面的代碼使用上面一些函數先登錄到一個伺服器資料庫,並為隨後的工作設置了語句句柄。
Global giHEnv As Long
Global giHDB As Long
Global giHStmt As Long
Dim myResult As integer
Dim myConnection As Srting
Dim myBuff As String*256
Dim myBufflen As Integer
If SQLAllocEnv(giHEnv)>SQL_SUCCESS Then
MsgBox"Allocation couldn注釋:t happen!"
End If
If SQLAllocConnect(giHEnv,giHDB)>SQL_SUCCESS Then
MsgBox "SQL Server couldn注釋:t connect!"
End If
myConnection="DSN=myServer;UID=LCL;PWD=;APP=ODBCTest;WSID=LCL;DATABASE=sales"
myResult=SQLDriverConnect(giHDB,Test,form1.hWnd,myConnection.len(myConnection),myBuff,256,myBufflen,SQL_DRIVER_COMPLETE_REQU IE D)
myResult=SQLAllocStmt(giHDS,giHStmt)
myResult=SQLFreeStmt(giHStmt,SQL_COLSE)
rsSQL="Select * from Customers Where City = "Hunan""
myResult = SQLExecDirect(giHStmt,rsSQL,Len(rsSQL))
㈣ Web資料庫的訪問技術
Web資料庫訪問技術通常是通過三層結構來實現的。目前建立與Web資料庫連接訪問的技術方法可歸納為CGI技術,ODBC技術和ASP、JSP、PHP技術。
CGI技術
CGI(Common Gateway Interface,通用網關界面)是一種Web伺服器上運行的基於Web瀏覽器輸入程序的方法,是最早的訪問資料庫的解決方案。CGI程序可以建立網頁與資料庫之間的連接,將用戶的查詢要求轉換成資料庫的查詢命令,然後將查詢結果通過網頁返回給用戶。
CGI程序需要通過一個介面才能訪問資料庫。這種介面多種多樣,資料庫系統對CGI程序提供了各種資料庫介面如Perl、C/C++、VB等。為了使用各種資料庫系統,CGI程序支持ODBC方式,通過ODBC介面訪問資料庫。
ODBC技術
ODBC(Open Database Connectivity,開放資料庫互接)是一種使用SQL的應用程序介面(API)。ODBC最顯著的優點就是它生成的程序與資料庫系統無關,為程序員方便地編寫訪問各種DBMS的資料庫應用程序提供了一個統一介面,使應用程序和資料庫源之間完成數據交換。ODBC的內部結構為4層:應用程序層、驅動程序管理器層、驅動程序層、數據源層。它們之間的關系如圖1-5所示。由於ODBC適用於不同的資料庫產品,因此許多伺服器擴展程序都使用了包含ODBC層的系統結構。
Web伺服器通過ODBC資料庫驅動程序向資料庫系統發出SQL請求,資料庫系統接收到的是標准SQL查詢語句,並將執行後的查詢結果再通過ODBC傳回Web伺服器,Web伺服器將結果以HTML網頁傳給Web瀏覽器,工作原理如圖1-6所示。
由於Java語言所顯示出來的編程優勢贏得了眾多資料庫廠商的支持。在資料庫處理方面,Java提供的JDBC為資料庫開發應用提供了標準的應用程序編程介面。與ODBC類似,JDBC也是一種特殊的API,是用於執行SQL語句的Java應用程序介面。它規定了Java如何與資料庫之間交換數據的方法。採用Java和JDBC編寫的資料庫應用程序具有與平台無關的特性。
ASP、JSP、PHP技術
ASP是Microsoft開發的動態網頁技術,主要應用於Windows NT+IIS或 Windows 9x+PWS平台。確切地說ASP不是一種語言,而是Web伺服器端的開發環境。利用ASP可以產生和運行動態的、交互的、高性能的Web服務應用程序。ASP支持多種腳本語言,除了VBScript和Pscript,也支持Perl語言,並且可以在同一ASP文件中使用多種腳本語言以發揮各種腳本語言的最大優勢。但ASP默認只支持VBScript和Pscript,若要使用其他腳本語言,必須安裝相應的腳本引擎。ASP支持在伺服器端調用ActiveX組件ADO對象實現對資料庫的操作。在具體的應用中,若腳本語言中有訪問資料庫的請求,可通過ODBC與後台資料庫相連,並通過ADO執行訪問庫的操作。關於ASP的編程技術將會在第7章中詳細介紹。
JSP是Sun公司推出的新一代Web開發技術。作為Java家族的一員,幾乎可以運行在所有的操作系統平台和Web伺服器上,因此JSP的運行平台更為廣泛。目前JSP支持的腳本語言只有Java。JSP使用JDBC實現對資料庫的訪問。目標資料庫必須有一個JDBC的驅動程序,即一個從資料庫到Java的介面,該介面提供了標準的方法使Java應用程序能夠連接到資料庫並執行對資料庫的操作。JDBC不需要在伺服器上創建數據源,通過JDBC、JSP就可以實現SQL語句的執行。
PHP是Rasmus Lerdorf推出的一種跨平台的嵌入式腳本語言,可以在Windows、UNIX、Linux等流行的操作系統和IIS、Apache、Netscape等Web伺服器上運行,用戶更換平台時,無需變換PHP代碼。PHP是通過Internet合作開發的開放源代碼軟體,它借用了C、Java、Perl語言的語法並結合PHP自身的特性,能夠快速寫出動態生成頁面。PHP可以通過ODBC訪問各種資料庫,但主要通過函數直接訪問資料庫。PHP支持目前絕大多數的資料庫,提供許多與各類資料庫直接互連的函數,包括Sybase、Oracle、SQL Server等,其中與SQL Server資料庫互連是最佳組合。
㈤ web訪問資料庫的一般過程
web就是網頁了,一般就是讀資料庫,修改資料庫,查詢資料庫,寫入資料庫,保存數據的這幾個過程。