書名: 透視C#核心技術:系統架構及移動端開發作者名: 馮軍編著本章字數: 1391字更新時間: 2021-07-08 12:02:00
2.3 Command對象
建立了數據庫連接之后,就可以執行數據操作了。一般對數據庫的操作被概括為增、刪、改、查。ADO.NET中定義了Command類去執行這些操作。
和Connection對象類似,在.NET中除了存在SqlCommand對象外,還存在OleDbCommand、ODBCCommand和OracleCommand對象,他們和SqlCommand如出一轍,本節將以SqlCommand講解Command對象的使用。
Command對象主要用來執行SQL語句,利用該對象可以查詢和更新數據。
使用Command對象的SQL屬性獲得的數據對象,可由DataReader和DataAdapter對象填充到DataSet里,從而完成對數據庫數據操作的工作。
2.3.1 Command對象的常用屬性
Command對象的常用屬性有Connection、ConnectionString、CommandType、CommandText和CommandTimeout,下面分別進行介紹。
1. Connection屬性
Connection屬性用于獲得或設置該Command對象的連接數據源。
如某SqlConnection類型的conn對象連在SQL Server服務器上,又有一個Command類型的對象cmd,可以通過cmd.Connection=conn來設置cmd到conn數據源的連接。
2. ConnectionString屬性
ConnectionString屬性用于設置或獲取連接數據庫時用到的連接字符串,用法和上述Connection屬性類似。
3. CommandType屬性
CommandType屬性用于獲得或設置CommandText屬性中的語句是SQL語句、數據表名還是存儲過程,該屬性的取值有如下3個。
1)CommandType設置為Text或不設置時,Command執行的是一個SQL語句。
2)CommandType設置為TableDirect時,指示Command的值為一個或多個表的名稱(SQL Server.NET數據提供程序不支持該屬性值,只有OLE DB的數據提供程序才支持TableDirect)。
3)CommandType設置為StoredProcedure時,Command執行的是一個存儲過程。
若不指定CommandType的值,則CommandType默認為Text。

4. CommandText屬性
CommandType屬性的不同取值代表獲取或設置的SQL語句、數據表名或存儲的過程。
5. CommandTimeout屬性
CommandTimeout屬性用于設置或獲取在終止執行命令的嘗試并生成錯誤之前的等待時間,以秒為單位,默認值為30秒。

2.3.2 Command對象的常用方法
不同的數據提供者,Command對象的名稱是不同的,例如在SQL Server Data Provider里為SqlCommand、在OLE DB Data Provider里為OleDbCommand等,但它們的方法類似。
1. 構造函數
構造函數用于構造Command對象。對于SqlCommand類型的對象,其構造函數說明如表2-5所示。
表2-5 SqlCommand構造函數

2. 常用方法
SqlCommand的常用方法如表2-6所示。
表2-6 SqlCommand常見方法

(1)ExecuteNonQuery()方法
ExecuteNonQuery()方法用于執行Insert、Update、Delete等沒有返回結果集的SQL語句,并返回執行命令后影響的行數。如果命令所對應的目標記錄不存在,返回0;如果出錯,返回-1。下述代碼通過調用ExecuteNonQuery函數,修改操作員表中用戶名為admin的記錄密碼為BYDSGF。

(2)ExecuteScalar()方法
當需要從SQL語句返回一個結果時,可以使用ExecuteScalar()例如判斷查詢是否執行成功或查詢一段時間的銷售總額等。這個方法通常用來執行包含Count、Sum等聚合函數的SQL語句。
ExecuteScalar方法執行一個SQL命令,并返回結果集中的首行首列。如果結果集大于一行一列,則忽略其他行和列。如下代碼使用ExecuteScalar方法判斷登錄是否成功。


讀取數據庫中表銷售訂單SaleOrder表的記錄個數,并把它輸出到控制臺上的代碼如下。

ExecuteScalar()方法的返回值類型是Object,我們可以根據具體需要將它轉換為合適的類型。
(3)ExecuteReader()方法
ExecuteReader()方法用于執行查詢命令,返回的是一個DataReader對象,通過該對象可以讀取查詢到的數據。通過DataReader類型的對象,應用程序能夠獲得執行SQL查詢語句后的結果集。
該方法的兩種定義為ExecuteReader()和ExecuteReader(CommandBehavior behavior)。ExecuteReader()不帶參數,直接返回一個DataReader結果集。ExecuteReader(Command Behavior behavior)根據behavior的取值類型,決定DataReader的類型。
如果behavior取值是CommandBehavior.SingleRow這個枚舉值,則返回的ExecuteReader為結果集中的第一條數據;如果取值是CommandBehavior.SingleResult,則返回查詢結果中多個結果集里的第一個。
一般來說,應用代碼可以隨機訪問返回的ExecuteReader列,但如果behavior取值為CommandBehavior.SequentialAccess,則對于返回的ExecuteReader對象只能順序讀取它包含的列。一旦讀過該對象中的列,就再也不能返回去讀取。這種操作是以犧牲方便性為代價來換取讀數據時的高效率。

這段代碼從數據庫的SaleOrderDetail表中讀取所有訂單號為2018120500001的數據,并把該表的商品編號及商品名稱字段的數據全部輸出到控制臺上。
- C++面向對象程序設計(第三版)
- Web應用系統開發實踐(C#)
- 一步一步學Spring Boot 2:微服務項目實戰
- Python 深度學習
- Vue.js入門與商城開發實戰
- Building a Recommendation Engine with Scala
- ArcGIS By Example
- Python算法從菜鳥到達人
- Getting Started with Laravel 4
- C語言從入門到精通
- Python機器學習:預測分析核心算法
- 零基礎學C語言第2版
- Solutions Architect's Handbook
- Python數據可視化之美:專業圖表繪制指南(全彩)
- 超好玩的Scratch 3.5少兒編程