我有一个返回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