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


Автор: damir83 28.1.2009, 14:08
есть прога,  БД Oracle, ИСР OracleForms
там функция в БД Oracle, возвращает число по определенным параметрам с формы
те там прямо пишешь:

переменная:= <имя функции>(параметры с формы)

как в C# ее вызвать? )
примерчик пж если можно


Автор: Unlocker 28.1.2009, 14:58
Непонятна суть проблемы. Если надо вызвать хранимую процедуру из БД, тогда надо ADO копать. А если копать ADO, то это в соседнюю ветку про БД.

Автор: antikom 28.1.2009, 16:31
Для того что бы вызвать процедуру и передать ей какой - либо параметр нужно сделать примерно следующиее:
Код

            System.Data.OracleClient.OracleConnection connection = new System.Data.OracleClient.OracleConnection();
            System.Data.OracleClient.OracleCommand command = new System.Data.OracleClient.OracleCommand();

            connection.ConnectionString = connectionString;
            connection.Open();
            command.CommandType = CommandType.StoredProcedure;
            command.Connection = connection;
            command.Parameters.AddWithValue("parameter Name", "Параметр с формы");
            command.ExecuteNonQuery();
            connection.Close();

Автор: damir83 29.1.2009, 10:18
Спс, antikom за направление

пишу так

Код


      this.FormConnect = new OracleConnection (MainConnectionString);

 // Открыть коннект
        this.FormConnect.Open();

OracleCommand command = this.FormConnect.CreateCommand();
        command.CommandType = CommandType.StoredProcedure;
        command.CommandText = "get_sum_prod";

        //параметры 
        OracleParameter ParamSub = new OracleParameter();
        ParamSub.DbType = DbType.Decimal;
            ParamSub.Value="203";
            ParamSub.ParameterName="a_sub";
            ParamSub.Direction = ParameterDirection.Input;
            command.Parameters.Add(ParamSub);
        OracleParameter ParamDatDdoc = new OracleParameter();
        ParamDatDdoc.DbType = DbType.Date;
            ParamDatDdoc.Value = "03.11.2007";
            ParamDatDdoc.ParameterName = "a_dat_v";
            ParamDatDdoc.Direction = ParameterDirection.Input;
            command.Parameters.Add(ParamDatDdoc);
        OracleParameter ParamDat = new OracleParameter();
        ParamDat.DbType = DbType.Date;
            ParamDat.Value = "29.01.2009";
            ParamDat.ParameterName = "a_dat_s";
            ParamDat.Direction = ParameterDirection.Input;
            command.Parameters.Add(ParamDat);

    
      
        MessageBox.Show(command.ExecuteScalar().ToString());

        // Закрыть коннект
        this.FormConnect.Close();



выдает ошибку (см рис)

Что не так?

Автор: damir83 29.1.2009, 10:33
get_sum_prod это функция у меня...

может в этом причина

я ведь указываю CommandType.StoredProcedure;


как указать что я это функция?

Автор: damir83 29.1.2009, 10:56
а селектом если тащить
работает

Код

 // Запросом вытащить функцию
        OracleCommand func = this.FormConnect.CreateCommand();
        func.CommandText = "select get_sum_prod(sub,'03.11.2007','28.01.2009') from Table"+
                            " where sub=203";
        // Выборка из функции
        OracleDataReader func_o = func.ExecuteReader();
        while (func_o.Read())
        {
            sum =Convert.ToInt32(func_o[0].ToString());

        }
        func_o.Close();

Автор: emmanuil 31.1.2009, 21:15
А если ты просто в оракле запустишь скрипт с get_sum_prod, что будет? Вернет результат?
С ораклом не знаком, но в Sql Server нужно указать например так - dbo.get_sum_prod().
Если функция скалярная, то возможно придется ее результат присвоить переменной, а потом выбрать из этой переменной. Например declare @var1 int @var1 = dbo.get_sum_prod() select @var1

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