官术网_书友最值得收藏!

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的數據,并把該表的商品編號及商品名稱字段的數據全部輸出到控制臺上。

主站蜘蛛池模板: 三原县| 清新县| 开原市| 广西| 西乌珠穆沁旗| 虹口区| 滨州市| 桂阳县| 兴业县| 廊坊市| 萍乡市| 山丹县| 邵东县| 东至县| 松江区| 罗田县| 茌平县| 泸西县| 华安县| 梅州市| 金秀| 石狮市| 新竹县| 安徽省| 波密县| 北票市| 松溪县| 光山县| 巴中市| 普陀区| 东宁县| 修武县| 镇沅| 廉江市| 蕲春县| 文昌市| 绥棱县| 汝城县| 红河县| 新建县| 郎溪县|