假设我在Oracle db中有一个存储过程,它有一个ref cursor输出参数。
来自.Net使用ODP.Net我试图从数据库中获取数据如下(我从http://www.oracle.com/technetwork/articles/dotnet/williams-refcursors-092375.html取得了这个)
OracleCommand cmd = new OracleCommand("otn_ref_cursor.get_emp_info", con);
cmd.CommandType = CommandType.StoredProcedure;
// create parameter object for the cursor
OracleParameter p_refcursor = new OracleParameter();
// this is vital to set when using ref cursors
p_refcursor.OracleDbType = OracleDbType.RefCursor;
// this is a function return value so we must indicate that fact
p_refcursor.Direction = ParameterDirection.ReturnValue;
// add the parameter to the collection
cmd.Parameters.Add(p_refcursor);
// create a data adapter to use with the data set
OracleDataAdapter da = new OracleDataAdapter(cmd);
// create the data set
DataSet ds = new DataSet();
// fill the data set
da.Fill(ds);
数据集如何填充记录?是否一次往返数据库服务器以获得一条记录?
与
相同OracleDataReader dr = cmd.ExecuteReader();
while (reader.Read())
{
//Do Something
}
我认为使用DataReader的方法会使每行往返一次到db,我的理解是否正确?
答案 0 :(得分:0)
每次往返数据库中获取的数据量由Fetchsize控制,这是一定数量的字节。我忘记了默认大小。您可以通过将FetchSize设置为Rowsize的倍数来控制此操作。 ODP.NET将缓存数据,直到需要获取更多数据。