2010/03/31

on
資訊農夫 IT Farmer (山海醉客)

DataTable DataSet DataView DataAdapter DataGridView System.IO
DataReader 物件
順向(Forward-Only)且唯讀(Read-Only)的資料流。
高效能的資料讀取方式。
較適合單次且短時間的資料擷取作業。
.NET Framework 中不存在一個名稱為 DataReader 的類別。
各種資料提供者會實作它們自己的資料讀取器類別:
SqlDataReader, OleDbDataReader ,OdbcDataReader ,OracleDataReader

只能透過呼叫 Command 物件的 ExecuteReader 方法來傳回,不能直接使用建構函式來個體化它
SqlDataReader => SqlCommand.ExecuteReader
OleDbDataReader => OleDbCommand. ExecuteReader
ExecuteReader 方法會將結果集內含於一個資料讀取器中傳回給您,因此您必須建立一個資料讀取器物件(也就是 SqlDataReader 物件)來擷取資料。
當您正在存取資料讀取器物件時,資料庫連接會保持開啟狀態,您必須在使用完畢後自行關閉資料庫連接。
不需要快取資料、結果集太大無法容納於用戶端電腦的記憶體中、亦或是要以順向且唯讀的方式來快取存取資料一次,則應該使用資料讀取器。
SqlDataReader.HasRows 屬性: 判斷 SqlDataReader 物件是否內含任何資料列。
SqlDataReader.Read 方法 : 前移至下一筆資料列。
SqlDataReader 的預設位置是在第一筆資料列之前。
判讀 Read 方法傳回的布林值。

將欄位名稱傳遞給 SqlDataReader 物件:myReader("姓名")
將欄位的序數(從 0 開始算起 )傳遞給 SqlDataReader 物件:myReader(0)
使用 SqlDataReader 一系列的 Getxxx 方法(GetString…等)來取得欄位內容:
一系列的 GetSqlxxx 方法(GetSqlString…等)專門用於取得 SQL Server 的欄位內容。
必須將欄位的序數傳遞給 GetSqlxxx 方法。
呼叫 SqlDataReader.NextResult 方法來將資料讀取器前移到下一個結果集。
如果有其他的結果集,NextResult 方法會傳回 True;否則會傳回 False。
GetName 方法用來取得欄位的名稱。
GetDataTypeName 方法用來取得欄位的原始資料型別名稱。
GetFieldType 方法用來取得代表物件之宣告型別的 Type 物件。
FieldCount 屬性會傳回目前資料列中的欄位數目。
SqlDataReader.GetSchemaTable 方法
所傳回的 DataTable 物件會內含 Transact-SQL 陳述式或預存程序所產生之結果集的結構描述資訊(亦即各欄位的中繼資料)。
所傳回的 DataTable 固定會擁有 23 個欄位,這些欄位分別用來存放特定的結構描述資訊。
所傳回之 DataTable 中的各筆資料列則分別代表結果集之每一個欄位的結構描述資訊。
============================================
Command 物件
資料命令就是 Command 物件,是下列類別的執行個體:
SqlDataReader, OleDbDataReader ,OdbcDataReader ,OracleDataReader
SqlCommand 類別的建構函式:
SqlCommand()
SqlCommand(ByVal cmdText As String)
SqlCommand( ByVal cmdText As String,  ByVal connection As SqlConnection)
SqlCommand(  ByVal cmdText As String,  ByVal connection As SqlConnection,   ByVal transaction As SqlTransaction)
如何使用資料命令來執行預存程 序 :
SqlCommand.CommandText = “預存程序的名稱”
SqlCommand.CommandType =CommandType.StoredProcedure
SqlCommand.ExecuteScalar 方法會取得結果集之第一筆資料記錄之第一個欄位的內容。
SqlCommand.ExecuteNonQuery 方法只會傳回整數值:-1 作業成功執行, 受影響的資料列筆數, 使用時機如下:
於用戶端執行資料定義語言(Data Definition Language,DDL)以便進行資料庫或目錄的結構操作。
透過資料命令來新增、修改與刪除資料庫中的資料記錄。
SqlCommand.ExecuteReader 方法會將結果集內含於一個資料讀取器中傳回給您,因此您必須建立一個資料讀取器物件(也就是 SqlDataReader 物件)來擷取資料。
使用 ExecuteReader 方法時的程式撰寫流程:
  • 建立連接。
  • 建立資料命令物件。
  • 設定 SqlCommand 物件的 Connection 屬性。
  • 設定 SqlCommand 物件的 CommandType 屬性。
  • 設定 SqlCommand 物件的 CommandText 屬性。
  • 開啟連接。
  • Dim myReader As SqlDataReader = myCommand.ExecuteReader()
  • 利用一個迴圈來反覆呼叫 SqlDataReader 物件的 Read 方法,直到此方法傳回 False 為止。
  • 呼叫 SqlDataReader.Close 方法來關閉資料讀取器。
  • 關閉連接。如果使用ExecuteReader(CommandBehavior.CloseConnection) 來執行資料命令,則當您呼叫 SqlDataReader.Close 方法來關閉資料讀取器時,資料命令所使用的連接會自動被關閉,此時您將不需要自行關閉連接。 
取得與設定 Transact-SQL 陳述式的參數 :
  • myCommand.CommandText = "SELECT * FROM 資料表名 " & "WHERE 姓名= @Name"
  • SQL Server .NET Framework 資料提供者不支援使用問號(?)替代符號 ,一定要使用以 @ 符號開始的具名參數。
  • Transact-SQL 陳述式內含參數時,必須在執行資料命令之前進行下列設定:
  • 於參數集合 SqlParameterCollection 當中替每一個參數加入一個參數物件(亦即 SqlParameter 物件)。
  • 指定參數的名稱以及參數所對應之欄位的資料型別與長度。
  • 設定參數的值。
SqlCommand.Parameters 屬性能夠取得與 SqlCommand 相關聯的參數集合(SqlParameterCollection)。
SqlParameterCollection.Add 方法能夠將 Transact-SQL 陳述式中的參數加至參數集合中。
使用 SqlParameter.Value 屬性來設定參數的值。
範例:
  • '內含一個 @Name 參數的 SELECT 陳述式
  • itCMD.CommandText =  "SELECT * FROM 資料表名 " & "WHERE 姓名 = @Name"
  • ' 於參數集合中替參數加入一個參數物件
  • itCMD.Parameters.Add("@Name", SqlDbType.NVarChar, 10)
  • ' 設定參數的值
  • itCMD.Parameters("@Name").Value = txtTargetName.Text

-

0 意見: