加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

存储过程 – BLToolkit Oracle SP支持

发布时间:2020-12-12 12:47:52 所属栏目:百科 来源:网络整理
导读:BLT是否支持Oracle存储过程?我尝试了很多方法,如下所述让它工作但没有运气.存储过程使用多个值更新表.这是存储过程,一个小的测试过程. DROP PROCEDURE BETA_AUTO_UPDATE;/ CREATE OR REPLACE PROCEDURE BETA_AUTO_UPDATE ( AutoId IN NUMBER,Rule IN NVARCH
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 Location);

那没用.

将odp.net上的跟踪级别设置为7.看到正在进行调用,但看不到任何参数.对企业Oracle来说,XE(认为它可能是一个许可问题,因为db大于5GB).没工作.

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

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

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

谢谢.
scope_creep

解决方法

我这样做

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读