2011-07-20 4 views
4

BLTはOracleストアドプロシージャをサポートしていますか?私は多くの方法を試してきましたが、それは動作するようにするために以下に説明されていますが、運がない。ストアドプロシージャは、いくつかの値を持つテーブルを更新します。これは小規模のテスト手順であるストアドプロシージャです。BLToolkit Oracle SPサポート

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); 

を。動作しませんでした

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

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

もこれを試してみました。

odp.netのトレース・レベルを7に設定します。呼び出しが行われたが、パラメータが見えなかったことを確認してください。エンタープライズOracleのXEを交換しました(ライセンスの問題として、dbが5GBより大きかったためだと思っていました)。うまくいきませんでした。

新しいユーザー、データファイル、表領域を作成し、すべてのロールとprivを割り当てます(任意のプロシージャの実行を含む)。うまくいきませんでした。

私は標準のado.net(非常に長い巻)を呼び出してOracleCommand経由でストアドプロシージャを呼び出し、完全に呼び出して更新しました。

私は困惑しています。上記のすべてがSQL Serverで動作します。

ありがとうございました。 scope_creep

答えて

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操作で行われます)

+0

実際にSPを呼び出しますか? –

+0

質問を完全に理解していないGetSpParameters - >ストアドプロシージャのパラメータコレクションを取得するためにDBを呼び出すSetSpCommand(...)ExecuteNonQuery() - >パラメータコレクションを設定し、ストアドプロシージャを実行するDBを呼び出す サイト上の - > [リンク](http://www.bltoolkit.net/Doc.SetSpCommand.ashx?HL=setspcommand) 作成しているパレメーターコレクションが正しいかどうかを確認するためにも使用できます –

+0

私はOracleDb.SetSpCommand( "Beta_Auto_UPDATE"、 OracleDb.CreateParameters(Betar))を使用しました。ExecuteNonQuery(); –