【问题标题】:BLToolkit Oracle SP supportBLToolkit Oracle SP 支持
【发布时间】:2011-10-09 13:10:52
【问题描述】:

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

【问题讨论】:

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


    【解决方案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 操作完成)

    【讨论】:

    • 不完全理解您的问题 GetSpParameters -> 调用 DB 以获取存储过程 SetSpCommand(...).ExecuteNonQuery() 的参数集合 -> 调用设置参数集合的 DB并在站点上执行存储过程->link您也可以使用它来检查您正在创建的参数集合是否正确
    • 我使用了 OracleDb.SetSpCommand("Beta_Auto_UPDATE", OracleDb.CreateParameters(Betar)).ExecuteNonQuery();
    • 我想知道,你有没有使用过这里的功能,stackoverflow.com/questions/4880884/… 和 Oracle。它无法使其与 Oracle 一起使用,但再次与 Sql Server 完美结合。任何想法。
    • 我在问什么,你设法得到 sp 的返回游标了吗?鲍勃。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-28
    • 2011-03-05
    • 2012-04-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多