Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > хранимые процедуры Oracle


Автор: romai 10.7.2005, 05:50
Не знаю как оформить вызов функции Oracle? smile

Автор: Дрон 10.7.2005, 23:28
romai
А если попробовать также как и в MSSQL?

Автор: Fyrklod 9.12.2007, 23:39
Цитата(Дрон @  10.7.2005,  23:28 Найти цитируемый пост)
А если попробовать также как и в MSSQL?

т.е. ? 
не знаю как к примеру автор топика, НО я ниразу ничео не вызывал.. тупо делал запросы... а если можно запросы эти делать в процедурах или вьюхах, то сам заинтересовался как можно вызвать их в шарпе.. так что если можно  smile 
заранее спасибо

Автор: thomas 10.12.2007, 00:17
Fyrklod, 
Вот пример вызова хранимой процедуры на сервере MS SQL 2005 из приложения C# 
Код

private static Factuur AddEntity(Factuur factuur)
        {
            int factuurnr = 0;
            using (SqlConnection con = new SqlConnection(Common.conStr)) // заюзаем соединение с БД
            { 
                string proc = "pr_Factuur_Add"; // имя хранимой процедуры в БД на сервере
                using (SqlCommand cmd = new SqlCommand(proc, con)) // заюзаем команду созданную на основании соединения и хранимой процедуры
                {
                    cmd.CommandType = CommandType.StoredProcedure; // скажем что тип команды это хранимая процедура
                    cmd.Parameters.AddWithValue("@datum", factuur.Datum); // присвоим значения параметрам хранимой процедуры
                    cmd.Parameters.AddWithValue("@klantnaam", factuur.Klantnaam);
                    cmd.Parameters.Add(new SqlParameter("@factuurnr", SqlDbType.Int)); // зададим параметр, который она должна вернуть
                    cmd.Parameters["@factuurnr"].Direction = ParameterDirection.Output;
                    con.Open(); // открыли соединение
                    cmd.ExecuteNonQuery(); // выполнили команду
                    factuurnr = Convert.ToInt32(cmd.Parameters["@factuurnr"].Value); // получили обратно присвоенный номер фактуры
                }
            }
            // --- получим сохраненную фактуру из БД
            factuur = GetEntity(factuurnr); // тут я вызываю функцию которая считывает из БД вставленную строку и присваивает значения полям класса, описывающего эту фактуру
            return factuur; // возврат экземпляра класса фактура
        }


А сама хранимая процедура выглядит так
Код

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[pr_Factuur_Add]
    @datum DATETIME,
    @klantnaam NVARCHAR(50),
    @factuurnr INT OUTPUT
AS
BEGIN
  SET @factuurnr = (SELECT ISNULL(MAX(factuurnr)+1,YEAR(GETDATE())*100000+1) FROM tblFactuur WHERE factuurnr > YEAR(GETDATE())*100000)
  INSERT INTO tblFactuur
    (
    factuurnr,
    datum,
    klantnaam
    )
    VALUES
    (
    @factuurnr,
    @datum,
    @klantnaam
    )
END

команда SET присваивает очередной номер фактуре по принципу YYYY00001 + 1, т.е. первые четыре цыфры это текущий год - 200700001, 200700002, 200700003 и так далее. Каждый год нумерация начинается с 1(200800001, 200800002, ... , 200900001, 200900002, ...)
OUTPUT указывает что хранимая процедура вернет значение номера фактуры в приложение её вызвавшее.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)