熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

手把手教你ADO.NET快速起步

2013-11-13 10:30:06  來源: .NET編程 

  ADONET是微軟的Microsoft ActiveX Data Objects (ADO)的下一代產品是在微軟的NET中創建分布式和數據共享應用程序的應用程序開發接口(API)
  
  ADONET能被用在任何用戶的應用程序需要和OLE DBcompliant的數據源連接和通訊例如Microsoft SQL Server
  
  同時ADONET又保持著與以前的ADO模型有關的一些主要概念它已經被極大的完善並從不同的信息來源提供途徑去獲得結構化的數據一個平台文本文件從數據庫管理系統獲得的相關數據或者是分級的XML數據然而所有都按照一個相容的標准化的設計模型來執行
  
  這篇文章意在簡要的介紹ADONET的關鍵特性重點講述了在關系數據庫管理系統(rdbms)中訪問數據
  
  快速浏覽
  
  SQL Server (及更新版本)以及可以通過 OLE DB 提供者進行訪問的任何數據源這些又稱為被管理的提供者(Managed Provider)NET框架的數據存取API提供了兩種方式分別識別並處理兩種類型的數據源SQL Server (及更新版本)和可以通過 OLE DB 提供者進行訪問的任何數據源SQL(SystemDataSQL)庫可以直接聯結到SQL Server的數據而ADO (SystemDataADO)庫可用於其他通過OLE DB 提供者進行訪問的任何數據源
  
  SQL Server被管理的提供者在MS SQL Server 或以後的版本中使用叫做tabulardata stream的專用協議而沒有使用OLE DB ADO 或 ODBC
  
  ADONET被管理的提供者能夠在這些OLE DB 提供者下工作
  
  驅動程序 Driver
  提供者 Provider
  
  SQLOLEDB
  SQL OLE DB Provider
  
  MSDAORA
  Oracle OLE DB Provider
  
  JOLT
  Jet OLE DB Provider
  
  MSDASQL/SQLServer ODBC
  SQL Server ODBC Driver via OLE DB for ODBC Provider
  
  MSDASQL/Jet ODBC
  Jet ODBC Driver via OLE DB Provider for ODBC Provider
  
  
  現在ADONET還不支持 MSDASQL/Oracle ODBC Driver(ORACLE OLE DB DRIVER FOR ODBC)
  
  以下章節將介紹每個被管理的提供者都可用的ADONET的核心組件
  
  Connections連接和管理數據庫事務
  Commands向數據庫發送的命令
  DataReaders直接讀取流數據
  DateSets 和 DateSetCommands對駐留內存中的數據進行存儲和操作
  
  
  核心的ADONET功能基本上可以被概括為如下內容
  
  Connection對象在Web頁面和數據庫間建立連接Commands對象向數據庫提供者發出命令返回的結果以一種流的方式貫穿於這些連接中結果集可以用DataReaders快速的讀取也可以儲存到駐留內存的DateSets對象中然後通過DateSetCommands對象讓用戶在數據集中訪問和操作記錄開發者可以用過DateSet內置的方法在基礎的數據源上去處理數據集
  
  為了使用NET框架中的被管理提供者需要把下面的名空間(namespaces)包括到aspx頁面中
  
  SQL被管理的提供者
  
  <%@ Import Namespace=SystemDataSQL %>
  
  ADO被管理的提供者
  
  <%@ Import Namespace=SystemDataADO %>
  
  Connections
  
  微軟在NET框架中提供了兩個Connection對象以建立連接到特定的數據庫SQLConnection和 ADOConnectionConnection對象能在已經創建的連接上通過調用open的方法來被明確的打開連接下面的代碼片斷演示了用任一提供者創建和打開連接
  
  SQLConnection
  
  [C#]
  String connectionString = server=localhost; uid=sa; pwd=; database=northwind;
  SQLConnection myConn = new SQLConnection(connectionString);
  myConnOpen();
  
  [VB]
  Dim connectionString As String = _
  m connectionString As String = _
  server=localhost; uid=sa; pwd=; database=northwind
  Dim myConn As SQLConnection = New SQLConnection(connectionString)
  myConnOpen
  
  ADOConnection
  
  [C#]
  String connectionString = Provider=SQLOLEDB; Data Source=localhost; uid=sa; pwd=; Initial Catalog=Northwind;
  ADOConnection myConn = new ADOConnection(connectionString);
  myConnOpen();
  
  [VB]
  Dim connectionString As String = _
  ost; uid=sa; pwd=; Initial Catalog=Northwind;
  ADOConnection myConn = new ADOConnection(connectionString);
  myConnOpen();
  
  [VB]
  Dim connectionString As String = _
  Provider=SQLOLEDB; Data Source=localhost; & _
  uid=sa; pwd=; Initial Catalog=Nohwind
  Dim myConn As ADOConnection = New ADOConnection(connectionString)
  myConnOpen()
  
  Commands
  
  在建立了連接以後下一步要做的就是對數據庫運行的SQL語句最簡單直接的方法是通過ADO和SQL命令對象來實現
  
  Command對象可以給予提供者一些該如何操作數據庫信息的指令
  
  一個命令(Command)可以用典型的SQL語句來表達包括執行選擇查詢(select query)來返回記錄集執行行動查詢(action query)來 更新(增加編輯或刪除)數據庫的記錄或者創建並修改數據庫的表結構當然命令(Command)也可以傳遞參數並返回值
  
  Commands可以被明確的界定或者調用數據庫中的存儲過程接下來的小段代碼證明了在建立連接之後如何去發出一個Select命令
  
  SQLCommand
  
  [C#]
  String SQLStmt = SELECT * FROM Customers;
  SQLCommand myCommand = new SQLCommand(SQLStmt myConn);
  
  [VB]
  Dim SQlStmt As String = SELECT * FROM Customers
  Dim myCommand As SQLCommand = New SQLCommand(SQLStmt myConn)
  
  ADOCommand
  
  [C#]
  String SQLStmt = SELECT * FROM Customers;
  ADOCommand myCommand = new ADOCommand(SQLStmt myConn);
  
  [VB]
  Dim SQlStmt As String = SELECT * FROM Customers
  Dim myCommand As ADOCommand = New ADOCommand(SQLStmt myConn)
  
  DataReaders
  
  當你處理大量數據的時候大量內存的占用會導致性能上的問題例如一個連接(connection)用傳統的ADO Recordset對象去讀行數據庫的記錄就必須為這行記錄將內存分配給這個連接直至這個連接的生命周期結束如果有用戶在同一時間對同一計算機進行同樣的操作內存被過度的使用就會成為關鍵性的問題
  
  為了解決這些問題NET框架包括了DataReaders對象而這個對象僅僅從數據庫返回一個只讀的僅向前數據流而且當前內存中每次僅存在一條記錄
  
  DataReader接口支持各種數據源比如關系數據和分級數據DataReader可以適用於在運行完一條命令僅需要返回一個簡單的只讀記錄集
  
  下面的代碼片斷闡述了怎麼樣聲明變量指向一個DataReader對象的實例還包括代碼執行時Command對象產生的結果當調用Command對象執行方法時Command對象必須已經被創建和作為參數來傳遞繼續上面的例子
  
  SQLDataReader
  
  [C#]
  SQLDataReader myReader = null;
  myCommandExecute(out myReader);
  
  [VB]
  Dim myReader As SQLDataReader = Nothing
  myCommandExecute(myReader)
  
  ADODataReader
  
  [C#]
  ADODataReader myReader = null;
  myCommandExecute(out myReader);
  
  [VB]
  Dim myReader As ADODataReader = Nothing
  myCommandExecute(myReader)
  
  接下來這步是一個使用DataReader的簡單格式
  
  [C#]
  While (myReaderRead()) {
  [C#]
  While (myReaderRead()) {
  // do your thing with the current row here
  }
  
  [VB]
  While myReaderRead
   do your thing with the current row here
  End While
  
  下面的例子展示了迄今為止我們所討論的內容建立一個到SQL數據源的連接對於連接的發送select命令用DataReader對象來保存返回的結果然後通過循環DataReader取得數據
  
  下面是用C#寫的完整代碼
  
  <%@ Import Namespace=SystemData %>
  <%@ Import Namespace=SystemDataSQL %>
  
  <html>
  <head>
  
  <script language=C# runat=server>
  public SQLDataReader myReader;
  public String html;
  
  protected void Page_Load(Object Src EventArgs E ) {
  SQLConnection mySQLConnection = new SQLConnection(server=localhost;uid=sa;pwd=;database=northwind);
  SQLCommand mySQLCommand = new SQLCommand(select * from customers mySQLConnection);
  
  try {
  mySQLConnectionOpen();
  mySQLCommdExecute(out myReader);
  
  Execute(out myReader);
  
  html=<Table>;
  html+=<TR>;
  html+=<TD
From:http://tw.wingwit.com/Article/program/net/201311/13836.html
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.