2014-02-21 2 views
2

Мне нужно изменить следующий код, чтобы количество строк ограничено.Заполнение набора данных с помощью 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. У моего сохраненного proc есть один REF_CURSOR (OUT TYPES.REF_CURSOR).

Любая помощь очень ценится.

ответ

1

Параметр srcTable - это имя DataTable в DataSet объект.

EDIT:

Объект 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); 

Spcifica lly, используя ваш пример, он должен выглядеть так:

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 
+0

Как вы можете видеть из фрагмента кода, в наборе данных нет таблиц. Вывод - это курсор. – Jimmy

+0

Заполнение «DataSet» любыми данными автоматически создает и добавляет «DataTable». Пройдите мимо вашего «Заполнить», затем посмотрите на свойство «Таблицы» на множестве в отладчике. Поскольку вы явно не рассматривали таблицу, вы можете использовать пример 'ds.Tables [0] .TableName'. –

+0

Почему код не должен бросаться? Вы только что создали набор данных, и в то время нет таблиц, но вы пытаетесь передать индекс 0 функции? – Jimmy

Смежные вопросы