我有一個返回REFCURSOR獲得的WebAPI get請求了REFCURSOR
TYPE TEST_LIST IS REF CURSOR;
Procedure TestProcedure (Id IN NUMBER, Result OUT TEST_LIST)
IS
BEGIN
OPEN Result
FOR
SELECT distinct o.paramNumber, o.paramVArchar
FROM testBD o
WHERE o.id = Id;
CLOSE Result;
END TestProcedure;
那麼類數據表的過程。
public class TestList
{
public long ParamNumber { get; set; }
public string ParamVarchar { get; set; }
}
和要執行的程序,然後得到數據表到一個列表,將其轉換成JSON字符串的方法:
public string GetResult(long id)
{
using (var connection = new OracleConnection())
{
connection.ConnectionString = ConfigurationManager.ConnectionStrings["Test"].ConnectionString;
using (var command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
command.CommandText = $"{PackageName}.TestProcedure";
parameter.Add("Id", OracleDbType.Long).Value = Id;
command.Parameters.Add("Result", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
OracleDataAdapter da = new OracleDataAdapter(command);
////creating and filling datatable
DataTable dt = new DataTable();
connection.Open();
da.Fill(dt);
connection.Close();
//creating a serializer
System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
//creating a dictionary list
List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
//filling list with datatable rows
foreach (DataRow dr in dt.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in dt.Columns)
{
row.Add(col.ColumnName, dr[col]);
}
rows.Add(row);
}
//returning a serialized string out of list
return serializer.Serialize(rows);
}
}
}
終於我在它與GET請求控制器
public string Get(long id)
{
return TestClass.GetResult(id);
}
我從中得到了一些錯誤。我需要得到一個字符串或列表在JSON中的參考光標。也許有一個更簡單的方法來做到這一點?或者我在這裏做錯了什麼?
你應該告訴我們你得到了什麼錯誤。 –
我可以看到的一個錯誤是你沒有做任何事情就關閉垃圾箱'CLOSE Result; ' – XING
該遊標正在通過選擇返回數據。沒有錯誤的SQL程序 - 它自己做的很好 – Eve