首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BLToolkit Oracle SP支持

BLToolkit Oracle SP支持
EN

Stack Overflow用户
提问于 2011-07-21 00:08:21
回答 1查看 1.3K关注 0票数 4

BLT是否支持Oracle存储过程?我尝试了许多方法,如下所述,让它工作,但没有运气。存储过程使用多个值更新表。这是存储过程,一个小的测试过程。

代码语言:javascript
复制
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;
   /

我尝试了以下方法

代码语言:javascript
复制
        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();

这不管用。

我试过了

代码语言:javascript
复制
        [ActionName("UPDATE")]
        public abstract void Update(Beta_Auto Auto);

这不管用。

我试过了:

代码语言:javascript
复制
        [SprocName("Beta_Auto_Update")]
        public abstract void UpdateByParam(
        [Direction.InputOutput("ID", "RuleGuid", "Name", "Location")] Beta_Auto Auto);

这不管用。

代码语言:javascript
复制
          [SprocName("Beta_Auto_Update")]
          public abstract void UpdateByParam(int Id, string RuleGuid, string Name,  string Location);

我也尝试了一下:

代码语言:javascript
复制
[ActionName("Update")]
public abstract void UpdateByParam(int Id, string RuleGuid, string Name, string Location);

这不管用。

将odp.net上的跟踪级别设置为7。看到正在进行调用,但看不到任何参数。将XE替换为企业级Oracle (认为这可能是一个许可问题,因为数据库大于5 5GB)。没有起作用。

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

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

我被难住了。以上所有功能都适用于SQL Server。

谢谢。scope_creep

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-01 17:31:44

我是这样做的

代码语言:javascript
复制
        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操作完成的)

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6764989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档