午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

ADO.NET入門教程(七) 談?wù)凜ommand對象高級應(yīng)用

 xrobinson 2014-11-29

摘要

在上一篇文章《你必須知道的ADO.NET(六) 談?wù)凜ommand對象與數(shù)據(jù)檢索》中,我詳細講解了Command對象的基礎(chǔ)知識以及基本用法。作為ADO.NET中最具執(zhí)行力的對象,Command對象實屬變幻莫測。在本文中,我將與大家一起探討Command對象的高級應(yīng)用與技巧。


目錄


1. 異步執(zhí)行命令

      在ADO.NET 2.0版本之前,執(zhí)行Command對象命令時,需要等待命令完成才能執(zhí)行其他操作。比如,執(zhí)行ExcuteNonQuery()方法,應(yīng)用程序?qū)3肿枞?,直到?shù)據(jù)操作成功完成或者異常終止以及連接超時。在ADO.NET 2.0版本引入異步執(zhí)行特性,顯然,ADO.NET更穩(wěn)健,更完美了。

      異步執(zhí)行的根本思想是,在執(zhí)行命令操作時,無需等待命令操作完成,可以并發(fā)的處理其他操作。ADO.NET提供了豐富的方法來處理異步操作,BeginExecuteNonQuery和EndExcuteNonQuery就是一對典型的為異步操作服務(wù)的方法。BeginExecuteNonQuery方法返回System.IAsyncResult接口對象。我們可以根據(jù)IAsyncResult的IsCompleted屬性來輪詢(檢測)命令是否執(zhí)行完成。還是來看一個簡單的實例把!這個實例采用了《你必須知道的ADO.NET(六) 談?wù)凜omand對象與數(shù)據(jù)檢索》中的數(shù)據(jù)庫和數(shù)據(jù)表。在這個實例中,我們將在tb_SelCustomer中插入500行數(shù)據(jù),并計算執(zhí)行時間。代碼如下:

View Code

 處理結(jié)果如下:

 

 

2. 請使用參數(shù)化查詢

      在ADO.NET中,查詢語句是以字符串的形式傳遞給外部數(shù)據(jù)庫服務(wù)器的。這些字符串不僅包含了基本命令關(guān)鍵字,操作符,還包含了限制查詢的數(shù)值。與其他編程語言不同,.NET是基于強類型來管理查詢字符串數(shù)據(jù)的。通過提供類型檢查和驗證,命令對象可使用參數(shù)來將值傳遞給 SQL 語句或存儲過程。 與命令文本不同,參數(shù)輸入被視為文本值,而不是可執(zhí)行代碼。 這樣可幫助抵御“SQL 注入”攻擊,這種攻擊的攻擊者會將命令插入 SQL 語句,從而危及服務(wù)器的安全。參數(shù)化命令還可提高查詢執(zhí)行性能,因為它們可幫助數(shù)據(jù)庫服務(wù)器將傳入命令與適當?shù)木彺娌樵冇媱澾M行準確匹配。

      對于不同的數(shù)據(jù)源來說,Parameter對象不同,但都派生自DbParameter對象。下表列舉了不同數(shù)據(jù)源對應(yīng)的Parameter對象。

數(shù)據(jù)提供程序                                       對應(yīng)Paramter對象                                                            命名空間                                                                                                                  
SQLServer 數(shù)據(jù)源                            使用SqlParamter對象 System.Data.SqlClient.SqlParameter
Ole DB 數(shù)據(jù)源 使用OleDbParameter對象 System.Data.OleDb.OleDbParameter
ODBC 數(shù)據(jù)源 使用OdbcParamter對象 System.Data.Odbc.OdbcParameter
Oracle數(shù)據(jù)源 使用OracleParameter對象 System.Data.OracleClient.OracleParameter

      Paramter對象的屬性很多,其中常見而且非常重要的主要有以下幾個:

  • DbType: 獲取或設(shè)置參數(shù)的數(shù)據(jù)類型。
  • Direction: 獲取或設(shè)置一個值,該值指示參數(shù)是否只可輸入、只可輸出、雙向還是存儲過程返回值參數(shù)。
  • IsNullable: 獲取或設(shè)置一個值,該值指示參數(shù)是否可以為空。
  • ParamteterName: 獲取或設(shè)置DbParamter的名稱。
  • Size: 獲取或設(shè)置列中數(shù)據(jù)的最大大小。
  • Value: 獲取或設(shè)置該參數(shù)的值。

 以SQL Server為例,SqlCommand對象包含一個Paramters集合,Paramters集合中包含了所有所需的SqlParamter對象。當執(zhí)行命令時,ADO.NET同時將SQL文本,占位符和參數(shù)集合傳遞給數(shù)據(jù)庫。

提示: 對于不同的數(shù)據(jù)源來說,占位符不同。SQLServer數(shù)據(jù)源用@parametername格式來命名參數(shù),OleDb以及Odbc數(shù)據(jù)源均用問號(?)來標識參數(shù)位置,而Oracle則以:parmname格式使用命名參數(shù)。

下面我們看一個實例,修改 測試顧客1 的基本信息。修改的基本信息如下:

  1. 電話號碼(Phone):18665691100
  2. 電子郵箱(Email):test@163.com
  3. 地址(ContactAddress):中國深圳市南山區(qū)

代碼如下:

View Code

 看了上面的代碼不知大家有何感想,是否覺得太多繁瑣呢?的確,我們可以用更簡潔的方法來實現(xiàn)。具體方法是,我們可以先構(gòu)造Parameter對象數(shù)組,然后遍歷添加到Command對象的Paramters集合中。代碼如下:

View Code

 上面兩種寫法,結(jié)果完全相同。查詢數(shù)據(jù)庫,我們可以得到以下結(jié)果:

 

3. 如何獲取插入行的ID?

      很多時候,我們需要知道插入行的ID是多少,以方便我們進行利用插入行的ID進行其他操作,比如在頁面上的展示等等。當然實現(xiàn)的方法有很多種,比如利用C#的out修飾符修飾參數(shù),我更傾向于用SQL Server數(shù)據(jù)庫原生的OUTPUT關(guān)鍵字。OUTPUT關(guān)鍵字返回INSERT操作的一個字段(一般是主鍵ID)。因此我們只要結(jié)合OUTPUT關(guān)鍵字以及ExecuteScalar方法,就很容易得到插入行的主鍵。還是看一個簡單的實例把!我們在tb_SelCustomer中插入一個新的顧客,并返回這個顧客的ID。代碼如下:

View Code

運行結(jié)果如下:

 

 

4. 總結(jié)

      簡言之,Command對象的核心作用是執(zhí)行命令。在執(zhí)行命令過程中,面臨的情況是十分復(fù)雜的。盡管如此,Command對象擁有優(yōu)越的人力資源(屬性和方法),來應(yīng)對一切可能發(fā)生的事??梢哉f,Command對象的穩(wěn)定發(fā)揮,為ADO.NET打下了扎實的根基。到目前為止,我們基本上了解ADO.NET DataProvider組件所有的內(nèi)容。因此,后面我將重點講述ADO.NET的心臟----DataSet以及如何將數(shù)據(jù)源本地化。另外,我非常期待能得到您的推薦和關(guān)注。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多