文件首頁
MySQL Connector/NET 開發人員指南
相關文件 下載本手冊
PDF (美式信紙) - 1.3MB
PDF (A4) - 1.3MB


6.1.5 使用預存程序

本節說明如何使用預存程序。將資料庫密集型作業放入預存程序中,可讓您為資料庫應用程式定義 API。您可以在多個應用程式和多種程式設計語言中重複使用此 API。此技術可避免重複資料庫程式碼,在您因結構描述變更、調整查詢效能或新增用於記錄、安全等的新資料庫作業而進行更新時,可以節省時間和精力。在完成本教學課程之前,請先熟悉建立不同種類預存常式的 CREATE PROCEDURECREATE FUNCTION 陳述式。

為了本教學課程的目的,您將建立一個簡單的預存程序,以了解如何從 MySQL Connector/NET 呼叫它。在 MySQL Client 程式中,連線到 world 資料庫並輸入下列預存程序

DELIMITER //
CREATE PROCEDURE country_hos
(IN con CHAR(20))
BEGIN
  SELECT Name, HeadOfState FROM Country
  WHERE Continent = con;
END //
DELIMITER ;

透過在 mysql 命令解譯器中輸入以下內容,測試預存程序是否如預期般運作

CALL country_hos('Europe');
注意

預存常式採用單一參數,該參數是您要將搜尋限制於的洲別。

在確認預存程序存在且正確無誤後,您可以看到如何從 Connector/NET 存取它。

從您的 Connector/NET 應用程式呼叫預存程序,類似於您在本教學課程稍早看到的技術。會建立 MySqlCommand 物件,但它不會採用 SQL 查詢作為參數,而是採用要呼叫的預存程序名稱。將 MySqlCommand 物件設定為預存程序的類型,如下列程式碼片段所示

string rtn = "country_hos";
MySqlCommand cmd = new MySqlCommand(rtn, conn);
cmd.CommandType = CommandType.StoredProcedure;

在此情況下,預存程序需要您傳遞參數。這可以使用上一節關於參數中看到的技術來達成,請參閱 第 6.1.4 節「使用參數」,如下列程式碼片段所示

cmd.Parameters.AddWithValue("@con", "Europe");

參數 @con 的值更實際的情況可能是來自使用者輸入控制項,但為了簡化,在此範例中它會設定為靜態字串。

此時,所有項目都已設定完成,您可以使用稍早章節中也學到的技術來呼叫常式。在此情況下,會使用 MySqlCommand 物件的 ExecuteReader 方法。

下列程式碼顯示完整的預存程序範例。

using System;
using System.Data;

using MySql.Data;
using MySql.Data.MySqlClient;

public class Tutorial6
{
    public static void Main()
    {
        string connStr = "server=localhost;user=root;database=world;port=3306;password=******";
        MySqlConnection conn = new MySqlConnection(connStr);
        try
        {
            Console.WriteLine("Connecting to MySQL...");
            conn.Open();

            string rtn = "country_hos";
            MySqlCommand cmd = new MySqlCommand(rtn, conn);
            cmd.CommandType = CommandType.StoredProcedure;

            cmd.Parameters.AddWithValue("@con", "Europe");

            MySqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                Console.WriteLine(rdr[0] + " --- " + rdr[1]);
            }
            rdr.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

        conn.Close();
        Console.WriteLine("Done.");
    }
}

在本節中,您已了解如何從 Connector/NET 呼叫預存程序。目前,這結束了我們關於使用 Connector/NET 進行程式設計的入門教學課程。