2014-02-21 96 views
2

我需要修改以下代碼,以便限制行數。用數據適配器填充行限制的數據集

// 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參數是DataTableDataSet對象的名稱。

編輯:

,當你調用Fill如果你還沒有明確創建了一個DataSet對象會自動添加一個表。默認名稱是「表格」。我不相信DataSet對象在意它正在填充什麼類型的數據。它仍然創建了DataTable

在撥打的Fill()之前。一個空表添加到DataSet一個名稱,以便您能夠在Fill()方法中訪問它:

ds.Tables.Add("myTableName"); 

然後調用合適的重載Fill()方法,像這樣:

da.Fill(ds, 1, 1000, "myTableName"); 

或者,如果你只是使用表的默認名稱,或不確定您創建的表的名稱(可疑):

da.Fill(ds, 1, 1000, ds.Tables[0].TableName); 

Spcifica使用你的例子,它應該看起來像這樣:

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」。通過你的'Fill'後,看看你調試器中集合上的'Tables'屬性。因爲你沒有明確地去修改表格,你可以使用'ds.Tables [0] .TableName'的例子。 –

+0

爲什麼不應該拋出代碼?你剛剛創建了一個數據集,當時沒有表,你仍然試圖將索引0傳遞給一個函數? – Jimmy

相關問題