使用OleDb调用存储过程和游标参数

问题描述 投票:0回答:1

我正在用C#开发一个连接到Oracle 10g数据库的应用程序。

我正在使用这样的Oledb:

OleDbConnection conn = ConnectionUtil.CreateConexion();

OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
cmd.CommandText = SP_AUTENTICAR_USUARIO;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("p_SED_USUARIO", OleDbType.VarChar).Value = strUsuario;
cmd.Parameters.Add("p_SED_PASS", OleDbType.VarChar).Value = strPass;
cmd.Parameters.Add("p_cursor", OleDbType.Cursor).Direction = ParameterDirection.Output;//I dont know what to put here

conn.Open();
cmd.ExecuteNonQuery();

OleDbDataReader objReader = (OleDbDataReader)cmd.Parameters["p_cursor"].Value;

if (objReader.Read())
{...

我需要调用存储过程并使用OleDbDataReader读取游标。

知道怎么做吗?

谢谢,

c# oracle oledb oledbdatareader
1个回答
-1
投票

请检查此示例代码。这是使用OracleDataReader

oraConn.Open();

OracleCommand cursCmd = new OracleCommand("CURSPKG.OPEN_TWO_CURSORS", oraConn);
cursCmd.CommandType = CommandType.StoredProcedure;
cursCmd.Parameters.Add("EMPCURSOR", OracleType.Cursor).Direction = ParameterDirection.Output;
cursCmd.Parameters.Add("DEPTCURSOR", OracleType.Cursor).Direction = ParameterDirection.Output;

OracleDataReader rdr = cursCmd.ExecuteReader();

Console.WriteLine("\nEmp ID\tName");

while (rdr.Read())
  Console.WriteLine("{0}\t{1}, {2}", rdr.GetOracleNumber(0), rdr.GetString(1), rdr.GetString(2));

rdr.NextResult();

Console.WriteLine("\nDept ID\tName");

while (rdr.Read())
  Console.WriteLine("{0}\t{1}", rdr.GetOracleNumber(0), rdr.GetString(1));

rdr.Close();
oraConn.Close();
© www.soinside.com 2019 - 2024. All rights reserved.