我正在将Web表单应用程序转换为mvc3,对于当前正在调用asmx Web服务返回数据集的数据库。由于我正在重建相当多的应用程序,我真的不需要或不想使用数据集。实体框架对于老板等是不可能的......因此这是现有类型的Oracle代码,它返回3个反射器,导致数据集包含3个数据表。这是现有的代码:
connection = new OracleConnection(EnvironmentSettings.connectionString);
connection.Open();
command = new OracleCommand("H16B.WEB_FACILITY.get_facility_queue", connection);
command.CommandType = CommandType.StoredProcedure;
// Input Parameters
command.Parameters.Add("pfacility", OracleDbType.Varchar2, facilityCode, ParameterDirection.Input);
// Output Parameters
command.Parameters.Add("pqueue", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
command.Parameters.Add("psubmitting", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
command.Parameters.Add("psubmitted", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
adapter = new OracleDataAdapter(command);
DataSet ds = new DataSet();
adapter.Fill(ds);
所以我想做的不是使用数据集,而是使用List或IEnumerable的集合。任何人都可以告诉我如何将数据捕获到列表中(我想要3个列表,当前的webmethod输出是一个数据集。提前感谢。
答案 0 :(得分:2)
如果使用Command.ExecuteNonQuery(),则每个ref游标参数都应包含一个值为OracleDataReader或OracleRefCursor的值,具体取决于参数的内部设置。
所以,你应该能够从这样的事情开始:
IDataReader queueReader = (IDataReader)command.Parameters["pqueue"].Value;
如果事实证明它是OracleRefCursor,你可以在其上使用GetDataReader以达到同样的效果。
由于在这种情况下内容很简单,你可以直接将其转换为IEnumerable;否则,您可能需要填写通用列表或集合。
答案 1 :(得分:0)
使用DataSet表中的DefaulViews,它们实现了IEnumberable。
关于msdn文档中的Dataview: '表示DataTable的数据表,自定义视图,用于排序,过滤,搜索,编辑和导航。'
更新:如果您想直接使用集合作为输出,请查看this site(格式可怕:/)
正如您在文章中看到的那样,您还必须在Oracle过程中更改某些内容。例如,如果要使用plsql关联数组,则输出参数不能是refcursors,但必须是plsql表。