Поддержка BLToolkit Oracle SP

Поддерживает ли BLT хранимые процедуры Oracle? Я пробовал множество методов, описанных ниже, чтобы заставить его работать, но не повезло. Хранимая процедура обновляет таблицу несколькими значениями. Это хранимая процедура, небольшая тестовая процедура.

DROP PROCEDURE BETA_AUTO_UPDATE;
/

 CREATE OR REPLACE PROCEDURE BETA_AUTO_UPDATE
   (
      AutoId IN NUMBER,
      Rule  IN NVARCHAR2,  
      Nam  IN NVARCHAR2,
      Loc IN NVARCHAR2
   )
  IS
  BEGIN 

UPDATE Beta_Auto
SET RuleGuid = Rule,        
    Name = Nam,
    Location = Loc
WHERE Id=AutoId;

  EXCEPTION 
     WHEN OTHERS THEN 
         RAISE_APPLICATION_ERROR(-20001, 'ERROR OCCURED DURING UPDATE');


   END BETA_AUTO_UPDATE;
   /

Пробовал следующее

        DbManager.AddDataProvider(new OdpDataProvider());
        DbManager OracleDb = new DbManager("BetaOracleDBConn");

        Beta_Auto Betar = new Beta_Auto();
        Betar.ID = 1;
        Betar.Name = "Jim";
        Betar.RuleGuid = "jlDKDKDKDKDKDKp";
        Betar.Location = "LocDLDLDLDLDtor";

        OracleDb.SetSpCommand("Beta_Auto_UPDATE",       
        OracleDb.CreateParameters(Betar)).ExecuteNonQuery();

Это не сработало.

Пробовал это

        [ActionName("UPDATE")]
        public abstract void Update(Beta_Auto Auto);

Это не сработало.

Пробовал это:

        [SprocName("Beta_Auto_Update")]
        public abstract void UpdateByParam(
        [Direction.InputOutput("ID", "RuleGuid", "Name", "Location")] Beta_Auto Auto);

Это не сработало.

          [SprocName("Beta_Auto_Update")]
          public abstract void UpdateByParam(int Id, string RuleGuid, string Name,  string Location);

Также пробовал это:

[ActionName("Update")]
public abstract void UpdateByParam(int Id, string RuleGuid, string Name, string Location);

Это не сработало.

Установите уровень трассировки на odp.net на 7. Увидел, что вызов выполняется, но не смог увидеть никаких параметров. Заменил XE (подумал, что это могла быть проблема с лицензированием, так как db был больше 5 ГБ) для корпоративного Oracle. Не работает.

Создайте нового пользователя, файл данных, табличное пространство и назначьте пользователю все роли и привилегии, включая выполнение любой процедуры. Не работает.

Я запустил стандартный ado.net (очень длинный), чтобы вызвать хранимую процедуру через OracleCommand, и она отлично позвонила и выполнила обновление.

Я в тупике. Все вышеперечисленное работает для SQL Server.

Спасибо. scope_creep


person scope_creep    schedule 20.07.2011    source источник


Ответы (1)


я делаю это как

        var parameters = OracleDb.GetSpParameters("BETA_AUTO_UPDATE", true, true);

        parameters.SetParamValue("pParam1", param1);
        parameters.SetParamValue("pParam2", param2);
        ...

        OracleDb.SetSpCommand("BETA_AUTO_UPDATE", parameters).ExecuteNonQuery();

Это дополнительная поездка туда и обратно, но поскольку я использую хранимые процедуры только для нескольких больших пакетных обновлений, это не имеет большого значения (обычные/простые обновления выполняются с операциями Linq DML)

person David DV    schedule 01.08.2011
comment
Не совсем понял ваш вопрос GetSpParameters -> вызов БД для получения набора параметров хранимой процедуры SetSpCommand(...).ExecuteNonQuery() -> вызов БД, который устанавливает набор параметров и выполняет хранимую процедуру на сайте -› ссылка Вы также можете использовать ее, чтобы проверить, вы создаете правильный - person David DV; 01.08.2011
comment
Я использовал OracleDb.SetSpCommand(Beta_Auto_UPDATE, OracleDb.CreateParameters(Betar)).ExecuteNonQuery(); - person scope_creep; 02.08.2011
comment
Мне было интересно, использовали ли вы когда-нибудь функциональность, найденную здесь, stackoverflow.com/questions/ 4880884/ с Oracle. Он не смог заставить его работать с Oracle, но снова работал безупречно с Sql Server. Есть идеи. - person scope_creep; 02.08.2011
comment
что я спрашиваю, вам удалось получить возвращаемые курсоры sp? Боб. - person scope_creep; 03.08.2011