我需要修改以下代码,以便限制行数。
// create the connection
OracleConnection conn = new OracleConnection("Data Source=oracledb;
User Id=UserID;Password=Password;");
// create the command for the stored procedure
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT_JOB_HISTORY.GetJobHistoryByEmployeeId";
cmd.CommandType = CommandType.StoredProcedure;
// add the parameters for the stored procedure including the REF CURSOR
// to retrieve the result set
cmd.Parameters.Add("p_employee_id", OracleType.Number).Value = 101;
cmd.Parameters.Add("cur_JobHistory", OracleType.Cursor).Direction =
ParameterDirection.Output;
// createt the DataAdapter from the command and use it to fill the
// DataSet
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds);//Here is where I need to limit the rows
我知道有一种最大计数的填充方法。
public int Fill( DataSet dataSet, int startRecord, int maxRecords, string srcTable )
但是,我不知道应该将什么传递给srcTable。我的存储过程有一个REF_CURSOR (OUT TYPES.REF_CURSOR)。
非常感谢任何帮助。
答案 0 :(得分:1)
srcTable
参数是DataTable
对象中DataSet
的名称。
修改强>
如果您没有明确创建一个表,则DataSet
对象会在您调用Fill
时自动添加一个表。默认名称为“表”。我不相信DataSet
对象关心关于它正在填充什么类型的数据。它仍会创建DataTable
。
在Fill()
上致电DataAdapter
之前。使用名称向DataSet
添加一个空表,以便您可以在Fill()
方法中访问它:
ds.Tables.Add("myTableName");
然后调用正确的重载Fill()
方法,如下所示:
da.Fill(ds, 1, 1000, "myTableName");
或者,如果你只是使用表的默认名称,或者不确定你创建的表的名称(可疑):
da.Fill(ds, 1, 1000, ds.Tables[0].TableName);
特别使用您的示例,它应如下所示:
OracleDataAdapter da = new OracleDataAdapter(cmd);
DataSet ds = new DataSet();
ds.Tables.Add();
da.Fill(ds, 1, maxRowCount, ds.Tables[0].TableName);//Here is where I need to limit the rows