簡體   English   中英

從具有輸入參數的Oracle存儲過程返回數據表到.NET應用程序

[英]Returning data table from Oracle stored procedure that has input parameters to a .NET application

我已經對我的問題進行了一些研究,但是由於缺乏Oracle方面的經驗(僅來自SQL Server背景),所以我感到很掙扎。

我正在嘗試從.NET應用程序調用Oracle存儲過程,並將數據表返回給我的應用程序。 我收到“ ORA-00900:無效的SQL語句”錯誤。

偽代碼背后:

OracleConnection conn = new OracleConnection("...");
OracleCommand cmd = new OracleCommand("sproc_name", conn);
cmd.Connection = conn;
cmd.Parameters.Add("Year", OracleDbType.Int16).Value = vYear
cmd.Parameters.Add("Name", OracleDbType.Varchar2).Value = vName;
cmd.Parameters.Add("ID", OracleDbType.Varchar2).Value = vID;
conn.Open();
DataTable dt = new DataTable();
dt.Load(cmd.ExecuteReader());

偽存儲過程:

CREATE OR REPLACE
PROCEDURE sproc_name
(
  Year IN NUMBER
, Name IN VARCHAR2
, ID IN VARCHAR2
)
AS
BEGIN
SELECT *
FROM TABLE
WHERE TABLE.Year = Year AND
      TABLE.Name = Name AND
      TABLE.ID = ID
END sproc_name;

我已經閱讀了有關參考游標的內容,並嘗試重寫我的程序,但是沒有運氣。 我應該如何進行?

嘗試這個

using (var conn = new OracleConnection("..."))

using (var cmd = conn.CreateCommand())
{

cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "sproc_name";
cmd.BindByName = true;

// ...

回答有點老的問題,但是回答回答的問題總是好的,Oracle永遠不會將您輸出為sql。 為了獲得結果集,您需要將sys_refcursor標識為Out參數。

因此,您的過程將類似於還嘗試命名正確(只是一個建議):)

CREATE OR REPLACE PROCEDURE sproc_name (
  numYear IN NUMBER
, strName IN VARCHAR2
, numID IN VARCHAR2,
, cr_output out sys_refcursor
)
AS
BEGIN
open cr_output for
SELECT *
FROM TABLE
WHERE TABLE.Year = Year AND
      TABLE.Name = Name AND
      TABLE.ID = ID
END sproc_name;

暫無
暫無

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

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