Acabo de empezar a leer acerca de los procedimientos almacenados. ¿Alguien puede ayudarme a llamar un procedimiento almacenado en Oracle desde C#?¿Llamar al procedimiento almacenado de Oracle desde C#?
Respuesta
Por favor, visite este sitio PAO establecido por Oracle para Microsoft OracleClient Desarrolladores: http://www.oracle.com/technetwork/topics/dotnet/index-085703.html
también a continuación es un ejemplo de código que puede empezar a llamar a un procedimiento almacenado desde C# para Oracle. PKG_COLLECTION.CSP_COLLECTION_HDR_SELECT es el procedimiento almacenado creado en Oracle que acepta los parámetros PUNIT, POFFICE, PRECEIPT_NBR y devuelve el resultado en T_CURSOR.
using Oracle.DataAccess;
using Oracle.DataAccess.Client;
public DataTable GetHeader_BySproc(string unit, string office, string receiptno)
{
using (OracleConnection cn = new OracleConnection(DatabaseHelper.GetConnectionString()))
{
OracleDataAdapter da = new OracleDataAdapter();
OracleCommand cmd = new OracleCommand();
cmd.Connection = cn;
cmd.InitialLONGFetchSize = 1000;
cmd.CommandText = DatabaseHelper.GetDBOwner() + "PKG_COLLECTION.CSP_COLLECTION_HDR_SELECT";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("PUNIT", OracleDbType.Char).Value = unit;
cmd.Parameters.Add("POFFICE", OracleDbType.Char).Value = office;
cmd.Parameters.Add("PRECEIPT_NBR", OracleDbType.Int32).Value = receiptno;
cmd.Parameters.Add("T_CURSOR", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
da.SelectCommand = cmd;
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}
}
¿Por qué se prefiere 'InitialLONGFetchSize = 1000'? De DOCS 'Predeterminado = 0. Al establecer esta propiedad en 0, se difieren por completo los datos de recuperación de datos LARGOS y LARGOS hasta que la aplicación lo solicite específicamente. – KLIM8D
Es básicamente el mismo mecanismo que para un comando no consulta con:
- command.CommandText = el nombre del procedimiento almacenado
- command.CommandType =
CommandType.StoredProcedure
- Como muchas llamadas a command.Parameters.Add como el número de parámetros que sp requiere
- command.ExecuteNonQuery
Hay un montón de ejemplos por ahí, el primero que devuelve Google es this one
También hay una pequeña trampa que puede caer, si su SP es una función, el parámetro de valor de retorno debe ser en primer lugar en los parámetros colección
en .Net a través de la versión 4 esto se puede hacer de la misma forma que para procedimientos almacenados de SQL Server, pero tenga en cuenta que lo que necesita:
using System.Data.OracleClient;
Hay some system requirements here que usted debe verificar están bien en su escenario.
Microsoft es deprecating this namespace as of .Net 4 por lo que se necesitarán proveedores externos en el futuro. Con esto en mente, es mejor utilizar Oracle Data Provider for .Net (ODP.NET) desde el principio: esto tiene optimizaciones que no están en las clases de Microsoft. Existen otras opciones de terceros, pero Oracle tiene un gran interés en mantener a los desarrolladores de .Net a bordo, por lo que el suyo debería ser bueno.
ahora tengo los pasos necesarios para llamar a procedimiento desde C#
//GIVE PROCEDURE NAME
cmd = new OracleCommand("PROCEDURE_NAME", con);
cmd.CommandType = CommandType.StoredProcedure;
//ASSIGN PARAMETERS TO BE PASSED
cmd.Parameters.Add("PARAM1",OracleDbType.Varchar2).Value = VAL1;
cmd.Parameters.Add("PARAM2",OracleDbType.Varchar2).Value = VAL2;
//THIS PARAMETER MAY BE USED TO RETURN RESULT OF PROCEDURE CALL
cmd.Parameters.Add("vSUCCESS", OracleDbType.Varchar2, 1);
cmd.Parameters["vSUCCESS"].Direction = ParameterDirection.Output;
//USE THIS PARAMETER CASE CURSOR IS RETURNED FROM PROCEDURE
cmd.Parameters.Add("vCHASSIS_RESULT",OracleDbType.RefCursor,ParameterDirection.InputOutput);
//CALL PROCEDURE
con.Open();
OracleDataAdapter da = new OracleDataAdapter(cmd);
cmd.ExecuteNonQuery();
//RETURN VALUE
if (cmd.Parameters["vSUCCESS"].Value.ToString().Equals("T"))
{
//YOUR CODE
}
//OR
//IN CASE CURSOR IS TO BE USED, STORE IT IN DATATABLE
con.Open();
OracleDataAdapter da = new OracleDataAdapter(cmd);
da.Fill(dt);
espero que esto ayude
¿Puede decirme cuál es el propósito de' OracleDataAdapter da = new OracleDataAdatper (cmd); ¿es? ¿Se requiere esta línea? – AlbatrossCafe
Este Código funciona bien para mí llamar a Oracle procedimiento almacenado
Añadir referencias por haciendo clic derecho en el nombre de su proyecto en el explorador de soluciones> Agregar referencia> .Net y luego agregue espacios de nombres.
using System.Data.OracleClient;
using System.Data;
A continuación, pega este código en controlador de eventos
string str = "User ID=username;Password=password;Data Source=Test";
OracleConnection conn = new OracleConnection(str);
OracleCommand cmd = new OracleCommand("stored_procedure_name", conn);
cmd.CommandType = CommandType.StoredProcedure;
--Ad parameter list--
cmd.Parameters.Add("parameter_name", "varchar2").Value = value;
....
conn.Open();
cmd.ExecuteNonQuery();
Y su hecho ... Feliz Codificación con C#
- 1. Cómo llamar a un procedimiento almacenado desde otro procedimiento almacenado?
- 2. Acceder al servicio web desde el procedimiento almacenado de Oracle
- 3. ¿Cómo llamar al procedimiento almacenado de MySQL desde Rails?
- 4. ¿Cómo llamar al procedimiento almacenado por hibernación?
- 5. C# Oracle procedimiento almacenado parámetro de orden
- 6. Problemas al llamar al procedimiento almacenado desde C# con CLOB grande
- 7. Llamar al procedimiento almacenado con los parámetros
- 8. Llamar a un procedimiento almacenado con otro en Oracle
- 9. llamando al procedimiento almacenado desde solr
- 10. Llamar a un procedimiento almacenado de Oracle en Squirrel SQL
- 11. llamada de Oracle procedimiento almacenado Usando createNativeQuery
- 12. Procedimiento almacenado al ejecutar otro procedimiento almacenado
- 13. Cómo llamar a un procedimiento almacenado (con parámetros) desde otro procedimiento almacenado sin tabla temporal
- 14. Llamar al procedimiento almacenado con el valor de retorno
- 15. Llamar a un procedimiento almacenado con asp.net
- 16. ¿Cómo ejecutar un procedimiento almacenado de Oracle?
- 17. No se puede llamar al procedimiento almacenado de Oracle y a la función
- 18. ASP.NET MVC: mejor manera de llamar al procedimiento almacenado
- 19. Procedimiento almacenado de Oracle con parámetros para la cláusula IN
- 20. ¿Cómo desactivo los resultados de la consulta al ejecutar un procedimiento almacenado desde un procedimiento almacenado?
- 21. ¿Cómo llamar al procedimiento almacenado en una vista?
- 22. Llamar a procedimiento almacenado de otro SQL procedimiento almacenado del servidor
- 23. Cómo llamar a la función C# en el procedimiento almacenado
- 24. Llamar a un procedimiento almacenado python
- 25. ¿Cómo llamar a la función de Oracle o al procedimiento almacenado utilizando el marco de persistencia de resorte?
- 26. ¿Cómo puedo llamar al procedimiento almacenado pl/sql (función, devolver el valor numérico)?
- 27. Procedimiento almacenado asincrónico Llamadas
- 28. C#: pasar un tipo definido por el usuario a un procedimiento almacenado de Oracle
- 29. Obtener conjunto de resultados del procedimiento almacenado de Oracle
- 30. Llamar a un procedimiento almacenado en un procedimiento almacenado en MySQL
Se puede publicar el procedimiento almacenado?¿Qué bibliotecas estás utilizando para conectarte a la base de datos? ADO.NET? Un ORM (nHibernate, EF)? Debe proporcionar muchos más detalles si desea una respuesta que se adapte a sus necesidades. – Oded
Si espera una respuesta específica de Oracle, por favor marque su pregunta como Oracle. Gracias ! – tsimbalar
He usado consultas SQL básicas antes. Sin embargo, ahora quería llamar a Oracle Procedures ya escrito, usando el código C#. – Rohan