パフォーマンスを向上させる動機で、データセットの使用を排除しようとしています& DataReaderを実装しています。ここで私のOracleプロシージャは、最初のDataTableに最初のレコードセットをロードするときに2つのリフレクタ&を返します。次のレコードはロードされません。DataReaderによって返された2つの結果セットでDataTable.Load()メソッドが機能しない場合
サンプル・コードは、このようなものになります。私はreader.NextResultを(使用して、その後しばらく(reader.Read())... &を使用して、ループのような代替方法がある知っている
DataSet ds = new DataSet();
using (OracleConnection db = new OracleConnection(conString))
{
try
{
using (OracleCommand mycom = new OracleCommand())
{
mycom.CommandText = "myPkg.pr_mySP";
mycom.Connection = db;
mycom.CommandType = CommandType.StoredProcedure;
mycom.Parameters.Add("ref_list1", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
mycom.Parameters.Add("ref_list2", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
//mycom.FetchSize = mycom.FetchSize * 64;
db.Open();
using (OracleDataReader reader = mycom.ExecuteReader())
{
DataTable custMapList = new DataTable("dtcustMapList");
custMapList.Load(reader);
reader.NextResult(); // POST THIS THE SECOND DATATABLE DOESNOT GETTING POPULATED
DataTable custMapSubList = new DataTable("dtcustMapSubList");
custMapSubList.Load(reader);
ds.Tables.Add(custMapList);
ds.Tables.Add(custMapSubList);
}
}
}
catch (Exception ex)
{
returnString += "Error, " + ex.Message;
}
)が動作しますが、そのような場合は、上記の作業がうまくいけば避けることができる他の多くのコードを変更する必要があります。
早期回答をお待ちしております。
を削除する必要がありますが、IIRCのDataReaderの使用高速シーケンシャルストリーミングパイプラインモデル。これは、次のデータセットに移動する前に、1つのデータセットを完全に消費しなければならないことを意味します。 – RBarryYoung