BLToolkit Oracle SP支持

时间:2011-07-20 16:08:21

标签: stored-procedures c#-4.0 oracle11g bltoolkit

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.看到正在进行调用,但看不到任何参数。对企业Oracle来说,XE(认为它可能是一个许可问题,因为db大于5GB)。没工作。

创建新用户,数据文件,表空间,并为用户分配所有角色和权限,包括执行任何过程。没工作。

我运行了一个标准的ado.net(非常长的啰嗦)通过OracleCommand调用存储过程,它完全调用并进行了更新。

我很难过。所有上述工作都适用于SQL Server。

感谢。 scope_creep

1 个答案:

答案 0 :(得分:4)

我这样做

        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操作进行正常/简单更新)