为了提高性能,我试图消除Dataset的使用并实现DataReader。在这里,我的Oracle Procedure返回两个引用,当我将第一个记录集加载到第一个DataTable中时,下一个永远不会加载。
示例代码如下所示:
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;
}
我知道还有其他方法,例如使用while(reader.Read())循环...然后使用reader.NextResult()可以工作,但是在那种情况下,我必须更改许多其他代码,如果以上工作正常。
赞赏早期反应。
参考方案
查看DataTable.Load
方法的reference source,很明显该方法在退出前会调用NextResult()
,因此您不需要这样做。
....
if(!reader.IsClosed && !reader.NextResult())
reader.Close();
....
顺便说一句,没有必要去寻找源头。 MSDN也说:
Load方法使用已加载的第一个结果集
IDataReader,并在成功完成后设置阅读器的
下一个结果集的位置(如果有)。
所以你只需要删除这行
// reader.NextResult(); // POST THIS THE SECOND DATATABLE DOESNOT GETTING POPULATED
.load()中的内容在主页上不活动 - php我有这些页面:information.php<div id='content'>Foo Bar</div> main.php<div id='main'></div> <script type="text/javascript"> $(do…
如何模拟保管库hvac.Client()方法 - python在这里,我正在使用unittest框架和Python。def getsomevalue(name): client = hvac.Client(url ="http://1.2.3.4:31485",token = "abcdefghijkkk") sampledata= client.read('secre…
单元测试中的静态类/方法/属性,是否停止 - c#考虑到没有引入不能再次测试的包装器就无法测试的方法,是否应该在单元测试开发环境中使用静态的类/方法/属性?另一种情况是,在单元测试目标中使用静态成员时,无法模拟静态成员。因此,在测试单元测试目标时,您必须测试静态成员。当静态成员执行计算时,您想隔离它。 参考方案 测试静态方法与测试任何其他方法没有什么不同。将静态方法作为依赖关系在另一个经过测试的模块中会引发…
Lambda函数如何成为Comparator的compare()方法 - java我已经看到在Java 8中,可以这样定义一个比较器:Comparator c = (Computer c1, Computer c2) -> c1.getAge().compareTo(c2.getAge()); 等效于:Comparator d = new Comparator<Computer> () { @Override publi…
Python Load Windows库C#转换 - python我有一个调用Windows dll(fbwflib.dll)的C#应用程序。从该dll调用的函数(FbwfIsFilterEnabled)需要通过引用传递两个参数。在C#中,我的代码是:public class FBWF_Utilities { [DllImport("fbwflib.dll", SetLastError = true…