Spec-Zone.ru › MySQL Connectors 1.0

6.1.5 Работа с хранимыми процедурами

В этом разделе показано, как работать с хранимыми процедурами. Размещение ресурсоемких операций базы данных в хранимых процедурах позволяет определять API для вашего приложения базы данных. Вы можете повторно использовать этот API в нескольких приложениях и на нескольких языках программирования. Этот метод позволяет избежать дублирования кода базы данных, экономя время и усилия при внесении обновлений из-за изменений схемы, оптимизации производительности запросов или добавлении новых операций базы данных для ведения журнала, обеспечения безопасности и так далее. Перед прохождением этого руководства ознакомьтесь с операторами и , которые создают различные типы хранимых процедур.

В целях этого руководства вы создадите простую хранимую процедуру, чтобы увидеть, как она может вызываться из 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 более реалистично могло бы быть получено из элемента управления вводом пользователя, но для простоты в этом примере оно задается как статическая строка.

На этом этапе все настроено, и вы можете вызвать процедуру, используя методы, изученные в предыдущих разделах. В этом случае используется метод ExecuteReader объекта MySqlCommand.

Следующий код демонстрирует полный пример хранимой процедуры.

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.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-net-en/connector-net-tutorials-stored-procedures.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API