簡體   English   中英

從.net應用程序執行Oracle存儲過程

[英]Execute Oracle stored procedure from .net application

我試圖從我的.net應用程序執行存儲過程,但我收到一個錯誤

ORA-00900:無效的SQL語句“

有什么建議嗎?

 await Context.Database.SqlQuery<Equipment>(_execPackage, new OracleParameter("ID", obID),
                new OracleParameter("Time", time),
                new OracleParameter("rNo", No).ToListAsync();

 private readonly string _execPackage = $@" EXEC procedurename(:ID,:Time,:rNo)";        

這是有效的

 await Context.Database.SqlQuery<object>($@" CALL procedurename(:p1,:p2,:p3)",
    new OracleParameter("p1", obID),
     new OracleParameter("p2", time),
     new OracleParameter("p3", Nmbr).ToListAsync();

這可能看起來很冗長,但這是我更喜歡設置對存儲過程的調用的方式:

using (var context = new DbContext()) // you don't have to strictly use this to reference the context, it's just what i gravitate towards
{
    var in_Id = new OracleParameter("in_ID", OracleDbType.TYPE, obID, ParameterDirection.Input);
    var in_time = new OracleParameter("in_time", OracleDbType.TYPE, time, ParameterDirection.Input);
    var in_rNo = new OracleParameter("in_rNo", OracleDbType.TYPE, No, ParameterDirection.Input);

   await  context.Database.SqlQuery<object>("BEGIN procedurename(:in_Id, :in_time, :in_rNo); END;", in_Id, in_time, in_rNo).ToListAsync();

}

有一點需要注意,如果ID參數是帶有自動生成其值的序列的PK,您將需要引用序列而不是傳入參數:

context.Database.SqlQuery<object>("BEGIN procedurename(SEQUENCE_NAME.nextval, :in_time, :in_rNo); END;", in_Id, in_time, in_rNo);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM