使用带行限制的dataadapter填充数据集

时间:2014-02-21 14:48:20

标签: c# .net database dataset dataadapter

我需要修改以下代码,以便限制行数。

// 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)。

非常感谢任何帮助。

1 个答案:

答案 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