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

用ADO.NET的ExecuteScalar方法返回單一值

2013-11-13 10:17:15  來源: .NET編程 

  若您程序中執行的 SQL statement 或 Stored Procedure只是要返回計算過的「單一值」例如:

  SELECT Count(*) FROM 員工數據表

  或只會回傳符合條件的「第一筆」record 的「第一個」column 其值例如:

  SELECT 電子信箱 FROM 員工數據表 WHERE 姓名= David

  我們即可用 Command 對象的 ExecuteScalar 方法 (ADONET x 即支援DbCommand 對象則要 NET 才支持)以回傳數據集中第一個 row 的第一個 column 其存儲值並忽略其它無用的數據此種做法比起用ExecuteReader 方法回傳「多組」record再指定給 DataReader 對象再逐一比對數據可更有效地節省系統資源並提升「性能 (performance)」

  但由於 ExecuteScalar 方法回傳的必為 Object 類型因此必須由程序員手動將其強制轉型為 NET 的 int 或 string 等想要的類型以便直接指派給 int 或 string 類型的變量或顯示在頁面上的控件中如下所示

  string theMail = (string)cmdExecuteScalar();

  因此使用 ExecuteScalar 方法時在程序中必須先確定承接回傳值的變量其類型為何否則會發生轉型錯誤此外在上例中若「員工數據表」內有超過一個以上叫做「David」的員工則 ExecuteScalar 方法只會回傳「第一個」叫做 David 的員工其電子信箱而忽略其它亦符合條件的數據

  此外ExecuteScalar 方法不只可以用在數據庫的 SELECT 作業亦可用於 INSERT 作業假設我們想要在 INSERT 一筆 record 至數據庫後馬上取得剛才新增那一筆 record 的 Identity (自動增號) 的值可用下列 SQL statement 達成

  string strSql = INSERT INTO 數據表 (name age) VALUES (David ); Select @@Identity;

  此時我們即可用 ExecuteScalar 方法取代 ExecuteNonQuery 方法去執行上述這一段 SQL statement以便返回一筆計算過的「單一值」亦即最新的 Identity 流水號碼關鍵 ADONET 代碼如下

  SqlConnection conn = new SqlConnection(strConnString);
        SqlCommand cmd = new SqlCommand(strSqlStr conn);
        try
        {
            connOpen();
            if (connState == ConnectionStateOpen)
            {
                // 返回最新的 Identity 流水號碼
                intNewestSerialNum = ConvertToInt(cmdExecuteScalar());
            }
        }
        catch (SqlException ex)
        {}


From:http://tw.wingwit.com/Article/program/net/201311/13163.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.