导航
  • 主页
  • ASP
  • .NET Framework
  • Web Services
  • VB
  • VC
  • 图表区
  • 分析与设计
  • 组件/控件开发
  • LINQ
  • 问答

OracleType.Cursor对应OleDbType这个是什么

shenlong0125 2011-05-04 04:03:34
OracleType.Cursor对应OleDbType这个是什么

是存储过程的 v_cur out T_Curor) --返回的结果集
...全文
269 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrhero 2011-09-09
ADO.NET不支持服务器游标,你不能用OleDb驱动...去看看ODP.NET支持不支持...
回复
zyd_computer 2011-09-09
OracleParameter[] para ={
new OracleParameter("p_StuGID",OracleType.VarChar),
new OracleParameter("p_Cursor",OracleType.Cursor,2000)
};
Cursor 对应的 是 C# 连接 Oracle 数据库显示数据时候,需要定义的游标 和 包



-- ==============================================
-- = 整理人: Longki
-- = 时间: 2011年9月8日16:02:24
-- = 功能:这么在Oracle中比较麻烦首先要建立一个包 在创建一个游标
-- = 创建有结果集的存储过程返回一个结果集 select * from list
-- ==============================================
create or replace package PK_LandBoardOA --创建一个名
as
type CS_LandBoardOA is ref cursor; --创建一个游标
end PK_LandBoardOA;
/
create or replace procedure GetAll
(
p_Cursor out PK_LandBoardOA.CS_LandBoardOA --定义一个CS_LandBoardOA类型的游标变量
)
is
begin
open p_Cursor for
select * from Student;
end;
/
回复
子夜__ 2011-05-04
如果不知道 可以不加type.
回复
shenlong0125 2011-05-04
我的程序是这样的
public DataTable GetListByPage(Pagination model, out int totalCount, out int totalPage)
{
DataTable dts = new DataTable();
OleDbParameter[] parameters = {
new OleDbParameter("p_tableName",OleDbType.VarChar),
new OleDbParameter("p_strWhere", OleDbType.VarChar),
new OleDbParameter("p_orderColumn", OleDbType.VarChar),
new OleDbParameter("p_orderStyle", OleDbType.VarChar),
new OleDbParameter("p_curPage", OleDbType.Integer),
new OleDbParameter("p_pageSize", OleDbType.Integer),
new OleDbParameter("p_fields", OleDbType.VarChar),
new OleDbParameter("p_totalRecords", OleDbType.Integer),
new OleDbParameter("p_totalPages", OleDbType.Integer),
new OleDbParameter("v_cur",OleDbType.VarBinary)};
parameters[0].Direction = ParameterDirection.Input;
parameters[1].Direction = ParameterDirection.Input;
parameters[2].Direction = ParameterDirection.Input;
parameters[3].Direction = ParameterDirection.Input;
parameters[4].Direction = ParameterDirection.Input;
parameters[5].Direction = ParameterDirection.Input;
parameters[6].Direction = ParameterDirection.Input;
parameters[7].Direction = ParameterDirection.Output;
parameters[8].Direction = ParameterDirection.Output;
parameters[9].Direction = ParameterDirection.Output;

parameters[0].Value = model.Table;
parameters[1].Value = model.Where;
parameters[2].Value = model.OrderColumn;
parameters[3].Value = model.OrderType;
parameters[4].Value = model.CurrentPage;
parameters[5].Value = model.PageSize;
parameters[6].Value = model.Column;

DataSet ds = RunProcedure("PCK_System.USP_GetRecordByPage", parameters, "PageTable");
//返回记录总数
//model.TotCount = int.Parse(parameters[7].Value.ToString());
totalCount = int.Parse(parameters[7].Value.ToString());
totalPage = int.Parse(parameters[8].Value.ToString());
//返回结果集
return ds.Tables[0];
}

/// <summary>
/// 执行存储过程
/// </summary>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <param name="tableName">DataSet结果中的表名</param>
/// <returns>DataSet</returns>
public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
{
init();
DataSet dataSet = new DataSet();
OleDbDataAdapter sqlDA = new OleDbDataAdapter();
sqlDA.SelectCommand = BuildQueryCommand(storedProcName, parameters);
sqlDA.Fill(dataSet, tableName);
Closes();
return dataSet;
}
/// <summary>
/// 构建 OracleCommand 对象(用来返回一个结果集,而不是一个整数值)
/// </summary>
/// <param name="connection">数据库连接</param>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>OracleCommand</returns>
private static OleDbCommand BuildQueryCommand(string storedProcName,IDataParameter[] parameters)
{
OleDbCommand command = new OleDbCommand(storedProcName, conn);
command.CommandType = CommandType.StoredProcedure;
foreach (OleDbParameter parameter in parameters)
{
command.Parameters.Add(parameter);
}
return command;
}
回复
shenlong0125 2011-05-04
OleDbParameter[] parameters = {
new OleDbParameter("p_tableName",OleDbType.VarChar),
new OleDbParameter("p_strWhere", OleDbType.VarChar),
new OleDbParameter("p_orderColumn", OleDbType.VarChar),
new OleDbParameter("p_orderStyle", OleDbType.VarChar),
new OleDbParameter("p_curPage", OleDbType.Integer),
new OleDbParameter("p_pageSize", OleDbType.Integer),
new OleDbParameter("p_fields", OleDbType.VarChar),
new OleDbParameter("p_totalRecords", OleDbType.Integer),
new OleDbParameter("p_totalPages", OleDbType.Integer),
new OleDbParameter("v_cur",OleDbType.VarBinary)};
new OleDbParameter("v_cur",OleDbType.)不知道写什么类型
回复
fk1984316 2011-05-04
作为返回参数的Cursor,直接使用DataTable接受就可以了
因为性能的原因,除非您显式指定,否则,Oracle 数据提供程序不会自动绑定 REF CURSOR 数据类型,因为 MSDAORA 会这样做。

数据提供程序不支持任何 ODBC 转义序列,包括用于指定 REF CURSOR 参数的 {resultset} 转义。

要执行返回 REF CURSOR 的存储过程,必须在 OracleParameterCollection 中定义参数,包括 Cursor 的 OracleType 以及 Output 的 Direction。数据提供程序只支持作为输出参数绑定 REF CURSOR。提供程序不支持 REF CURSOR 作为输入参数。

不支持从参数值获取 OracleDataReader。在执行命令后,值属于 DBNull 类型。

适用于 REF CURSOR 的唯一 CommandBehavior 枚举值(例如在调用 ExecuteReader 时)是 CloseConnection;所有其他枚举值均将被忽略。

REF CURSOR 在 OracleDataReader 中的顺序取决于参数在 OracleParameterCollection 中的顺序。ParameterName 属性被忽略。

不支持 PL/SQL TABLE 数据类型。但是,REF CURSOR 的效率更高。如果必须使用 TABLE 数据类型,请使用 OLE DB .NET 数据提供程序和 MSDAORA。
回复
发动态
发帖子
.NET技术社区
创建于2007-09-28

5.8w+

社区成员

.NET技术交流专区
申请成为版主
社区公告
暂无公告