Foros del Web » Programación para mayores de 30 ;) » .NET »

llamar stored procedure

Estas en el tema de llamar stored procedure en el foro de .NET en Foros del Web. hola amigos del foro, Estoy trabajando con vb.net y normalmente siempre hacia mis consultas con insert, update,delete, haciendolos de manera sencilla pero ahora me estan ...
  #1 (permalink)  
Antiguo 25/10/2012, 13:14
 
Fecha de Ingreso: mayo-2012
Ubicación: Lima
Mensajes: 14
Antigüedad: 11 años, 11 meses
Puntos: 1
Pregunta llamar stored procedure

hola amigos del foro,
Estoy trabajando con vb.net y normalmente siempre hacia mis consultas con insert, update,delete, haciendolos de manera sencilla pero ahora me estan pidiendo que trabaje con stored procedure y no sé como llamarlos (osea tengo un stored que cumple la funcion de REGISTRAR en mi BD datos de un formulario), tengo mi button registrar. Como hago para que cuando le de click en el button me guarde en mi BD?
  #2 (permalink)  
Antiguo 25/10/2012, 20:44
Avatar de cristiantorres  
Fecha de Ingreso: marzo-2012
Mensajes: 383
Antigüedad: 12 años, 1 mes
Puntos: 61
Respuesta: llamar stored procedure

Pues no es mucha la diferencia.
Seria.
Código vb.net:
Ver original
  1. Dim cmd As New SqlCommand("NombreProcedimientoAlmacenado", conn) 'nombre del procedimiento, conn es la cadena de conexion
  2. cmd.CommandType = CommandType.StoredProcedure 'especificas que se ejecutara un procedimiento
  3. 'envias los parametros
  4. cmd.Parameters.AddWithValue("@param1", textbox1.Text)
  5. cmd.Parameters.AddWithValue("@param2", textbox2.Text)
  6.  
  7. conn.Open() 'abris la conexion
  8. Try
  9.      cmd.ExecuteNonQuery()
  10.      MessageBox.Show("Registro Ingresado con Exito...")
  11. Catch ex As Exception
  12.        MessageBox.Show("Error no se Pudo Ingresar el Registro...")
  13. End Try

Como veras es casi lo mismo lo que cambia es que el el comand pones el nombre del procedimiento y tambien especificas que se ejecutara un procedimiento lo demas es igual.
__________________
Visita mi Blog C#, vb.net, asp.net, sql, java y mas...
Blog Cristian Torres
  #3 (permalink)  
Antiguo 26/10/2012, 10:40
 
Fecha de Ingreso: mayo-2012
Ubicación: Lima
Mensajes: 14
Antigüedad: 11 años, 11 meses
Puntos: 1
Respuesta: llamar stored procedure

Hola cristian, me faltó aclarar que uso BD oracle y bueno la estructura que me das me sirve mucho; e encontrado algo de codigo relacionado con lo que comente arriba pero no entiendo muy bien, me puedes ayudar a entenderlo porfavor ? quiza un poco de documentacion de tu parte.
Código vb:
Ver original
  1. Dim cmdCommand As OracleCommand = New OracleCommand
  2.  
  3. ' agregar parámetros
  4. With cmdCommand.Parameters
  5.    .Add(New OracleParameter("VI_CH_COD_EMPR", OracleDbType.Char, pstrCOD_SOCIEDAD.Length, pstrCOD_SOCIEDAD, ParameterDirection.Input))
  6.    .Add(New OracleParameter("VI_CH_COD_USUARIO", OracleDbType.Char, pstrCOD_USUARIO.Length, pstrCOD_USUARIO, ParameterDirection.Input))
  7.    .Add(New OracleParameter("VO_NU_COD_ERR", OracleDbType.Int32, 0, pstrCOD_EST_EVE, ParameterDirection.Output))
  8.    .Add(New OracleParameter("VO_VA_MSJ_ERR", OracleDbType.Varchar2, 2000, pstrCOD_USUARIO, System.Data.ParameterDirection.Output))
  9.    ' configurar command
  10.   .CommandText = Me.ObtenerCommandText(lsNombreStore)
  11.    .CommandType = CommandType.StoredProcedure
  12.    .Connection = objCNX       -- varoable Oracleconnection
  13.  
  14.    Try
  15.       ' ejecuta comando
  16.      .ExecuteNonQuery()
  17.       If Not CType(.Parameters.Item("VO_NU_COD_ERR").Value, Integer).Equals(0) Then
  18.          If Not Microsoft.VisualBasic.IsDBNull(.Parameters.Item("VO_VA_MSJ_ERR").Value) Then
  19.             ' disparar exception con texto desde la bd
  20.            pstrMSG_ERR = CType(.Parameters.Item("VO_VA_MSJ_ERR").Value, Oracle.DataAccess.Types.OracleString).Value
  21.          Else
  22.             pstrMSG_ERR = "Ocurrio un error al ejecutar el procedimiento. ErrNumber:=" + .Parameters.Item("VO_NU_COD_ERR").Value.ToString
  23.          End If
  24.       Else
  25.          '// caso ejecucion exitosa
  26.         lbRet = True
  27.       End If
  28.    Catch ex As Exception
  29.       ' capturar mensaje de error
  30.      pstrMSG_ERR = ex.Message
  31.  
  32.    Finally
  33.       '//
  34.   End Try
  35. End With
  #4 (permalink)  
Antiguo 26/10/2012, 11:13
Avatar de cristiantorres  
Fecha de Ingreso: marzo-2012
Mensajes: 383
Antigüedad: 12 años, 1 mes
Puntos: 61
Respuesta: llamar stored procedure

Pues no cambiaría mucho solo que usarías las clases ado.net para oracle.
Puedes consultar la propia documentación de microsoft.
Procedimientos almacenados de forma de llamar a Oracle en Visual Basic .NET con el proveedor administrado de Oracle de Microsoft

Como veras la clave esta en definir el objeto comand como store procedure.
Código vb.net:
Ver original
  1. comand.CommandType = CommandType.StoredProcedure
De ahí lo demás es casi similar a como que estuvieras haciendo las query manuales.
__________________
Visita mi Blog C#, vb.net, asp.net, sql, java y mas...
Blog Cristian Torres
  #5 (permalink)  
Antiguo 30/10/2012, 14:56
 
Fecha de Ingreso: mayo-2012
Ubicación: Lima
Mensajes: 14
Antigüedad: 11 años, 11 meses
Puntos: 1
Pregunta Respuesta: llamar stored procedure

Hola nuevamente, tengo este SP-----lo q hace es hacer select a una tabla y enviar un codigo.
Código:
PROCEDURE SPX_DOCUME_X_COBRAR_AGREGA_SPS(
   
   VO_CH_NRO_CUENTA         IN  REGIS_DOC.NRO_CUENTA %TYPE,
   VO_CH_OUT_NRO_CUENTA     OUT REGIS_DOC.NRO_CUENTA %TYPE,
   VO_CH_COD_SOC            OUT REGIS_DOC.COD_SOC % TYPE,
   VO_CH_NOM_SOC            OUT REGIS_DOC.NOM_SOC %TYPE,
   VO_NU_COD_ERR            OUT NUMBER,
   VO_VA_MSJ_ERR            OUT VARCHAR2,
   VO_CUR_CURSOR            OUT CUR_RETURN 
)
IS
  BEGIN
     -- consultar tabla
       OPEN VO_CUR_CURSOR FOR
       
         SELECT RD.NRO_CUENTA,SN.COD_SOC,SN.NOM_SOC
         FROM REGIS_DOC RD,SOCIO_NEGO SN
         WHERE SN.COD_SOC=RD.COD_SOC
         ;


 -- Indicar ejecucion sin errores
   VO_NU_COD_ERR := 0;
   VO_VA_MSJ_ERR := '';

EXCEPTION
      WHEN OTHERS THEN
         VO_NU_COD_ERR := -1;
         VO_VA_MSJ_ERR := 'Error Store: SPX_DOCUME_X_COBRAR_SPI '|| CS_ENTER ||
                 SQLERRM || CS_ENTER || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;

END SPX_DOCUME_X_COBRAR_AGREGA_SPS;
estoy en el evento click de mi button mostrar y tengo este codigo con el cual quiero que me ayuden a acondicionarlo con mi SP . Necesito su ayuda con este problema!!

Código vb:
Ver original
  1. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
  2.         Dim x As Exception
  3.         Dim Ds As New DataSet()
  4.         Dim Oraclecon As OracleConnection = New OracleConnection("Server= servidor/xe;Uid=usuario;Pwd=clave")
  5.  
  6.  
  7.         Oraclecon.Open()
  8.  
  9.  
  10.         Dim myCMD As New OracleCommand()
  11.         myCMD.Connection = Oraclecon
  12.         myCMD.CommandText = "ERP_DOCUME_X_COBRAR.SPX_DOCUME_X_COBRAR_AGREGA_SPS"
  13.         myCMD.CommandType = CommandType.StoredProcedure
  14.         myCMD.Parameters.Add(New OracleParameter("VO_CH_NRO_CUENTA", OracleType.Number)).Value = 123
  15.         'myCMD.Parameters.Add(New OracleParameter("io_cursor", OracleType.Cursor)).Direction = ParameterDirection.Output
  16.  
  17.         Dim MyDA As New OracleDataAdapter(myCMD)
  18.  
  19.         Try
  20.             MyDA.Fill(Ds)
  21.         Catch x
  22.             MessageBox.Show(x.Message.ToString)
  23.         End Try
  24.  
  25.         DataGridView1.DataSource = Ds.Tables(0)
  26.  
  27.         Oraclecon.Close()
  28.     End Sub

Última edición por dorer; 30/10/2012 a las 14:58 Razón: Fallta de informacion
  #6 (permalink)  
Antiguo 30/10/2012, 15:07
Avatar de Aquaventus  
Fecha de Ingreso: junio-2010
Ubicación: Lima-Peru , En el alba de la naturaleza
Mensajes: 2.105
Antigüedad: 13 años, 10 meses
Puntos: 267
Respuesta: llamar stored procedure

Hola dorer, esto te puede servir para que entiendas un poco mas acerca de tu problema :
Input output parameter
Si bien esto es de un sql dataadapter, la estructura es la misma nada mas que cambia el nombre por oracle. Saludos!.
__________________
Internet es tener todo el conocimiento global a tu disposición.
Desarrollo de Software - Ejemplos .Net
  #7 (permalink)  
Antiguo 05/11/2012, 10:13
 
Fecha de Ingreso: mayo-2012
Ubicación: Lima
Mensajes: 14
Antigüedad: 11 años, 11 meses
Puntos: 1
Pregunta Respuesta: llamar stored procedure

Ahora estoy llamando un s.p que solo hace un select de mi BD y lo muestra en un datagridview pero no funciona.Espero puedan ayudarme les dejo aqui lo q e avanzado
Código vb:
Ver original
  1. Dim x As Exception
  2.         Dim Ds As New DataSet()
  3.         Dim Oraclecon As New OracleConnection("Server=localhost;Uid=hola;Pwd=prueba")
  4.  
  5.         Oraclecon.Open()
  6.  
  7.         Dim myCMD As New OracleCommand()
  8.         myCMD.Connection = Oraclecon
  9.         myCMD.CommandText = "ERP_DOCUME_X_COBRAR.SPX_DOCUME_X_COBRAR_SPS"
  10.         myCMD.CommandType = CommandType.StoredProcedure
  11.  
  12.         'myCMD.Parameters.Add(New OracleParameter("VO_CUR_CURSOR", OracleType.Number)).Value = 0
  13.        myCMD.Parameters.Add(New OracleParameter("VO_CUR_CURSOR", OracleType.Cursor)).Direction = ParameterDirection.Output
  14.  
  15.         Dim MyDA As New OracleDataAdapter(myCMD)
  16.  
  17.         Try
  18.  
  19.             MyDA.Fill(Ds)
  20.         Catch x
  21.             MessageBox.Show(x.Message.ToString)
  22.         End Try
  23.  
  24.         DataGrid1.DataSource = Ds.Tables(0)
  25.  
  26.         Oraclecon.Close()

aqui les dejo el SP
Código vb:
Ver original
  1. PROCEDURE SPX_DOCUME_X_COBRAR_SPS(
  2.  
  3.    VO_NU_COD_ERR           OUT NUMBER,
  4.    VO_VA_MSJ_ERR           OUT VARCHAR2,
  5.    VO_CUR_CURSOR           OUT CUR_RETURN
  6. )
  7. IS
  8.    BEGIN
  9.    -- consultar tabla
  10.        OPEN VO_CUR_CURSOR FOR
  11.    
  12.           SELECT RD.NRO_CUENTA,TC.DES_TIPO_COMPROB AS DOCUMENTO ,RD.NRO_SERIE || ' - ' ||RD.NRO_COMPROB AS NRO_FACTURA,RD.COD_SOC AS CODIGO,RD.NOM_SOC AS NOMBRE,RD.USU_COBRADOR AS COBRADOR,RD.FEC_FIN,M.NOM_MONEDA,RD.IMPORTE,RD.COD_USU_CREA,SYSDATE AS FEC_MODIF
  13.                 FROM REGIS_DOC RD,TIPO_COMPROB TC,MONEDA M
  14.                         WHERE RD.COD_TIPO_COMPROB=TC.COD_TIPO_COMPROB
  15.                                AND RD.COD_MONEDA=M.COD_MONEDA;
  16.    -- Indicar ejecucion sin errores
  17.    VO_NU_COD_ERR := 0;
  18.    VO_VA_MSJ_ERR := '';
  19.  
  20. EXCEPTION
  21.       WHEN OTHERS THEN
  22.          VO_NU_COD_ERR := -1;
  23.          VO_VA_MSJ_ERR := 'Error Store: SPX_DOCUME_X_COBRAR_SPS '|| CS_ENTER ||
  24.                 SQLERRM || CS_ENTER || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;
  25.                  
  26. END SPX_DOCUME_X_COBRAR_SPS;
  #8 (permalink)  
Antiguo 05/11/2012, 19:22
Avatar de drako_darpan  
Fecha de Ingreso: octubre-2008
Ubicación: Sinaloa
Mensajes: 617
Antigüedad: 15 años, 6 meses
Puntos: 58
Respuesta: llamar stored procedure

Hola que tal, si el SP te va a regresar el valor de una tabla por que no lo haces mas simple:

Código SQL:
Ver original
  1. PROCEDURE SPX_DOCUME_X_COBRAR_SPS  @sParametro_Entrada INT
  2. BEGIN
  3.   SELECT *
  4.   FROM TablaX
  5.   WHERE campo_a_consultar = @sParametro_Entrada
  6. END

Y en el llamado lo puedes hacer asi:

Código C#:
Ver original
  1. OdbcConnection odbc= new OdbcConnection();
  2.  
  3. sConsulta = string.Format("SELECT SPX_DOCUME_X_COBRAR_SPS ({0})", Valor_Consultar);
  4. OdbcDataAdapter oda = new OdbcDataAdapter(sConsulta, odbc);
  5. DataSet ds = new DataSet();
  6. oda.Fill(ds, "Agotados");
  7.  
  8. Grid.DataSource = ds;
  9. Grid.DataMember = "Agotados";

Asi lo hago yo en C# y no e tenido problemas

  #9 (permalink)  
Antiguo 26/07/2018, 14:42
 
Fecha de Ingreso: agosto-2012
Ubicación: M.
Mensajes: 2.031
Antigüedad: 11 años, 8 meses
Puntos: 52
Respuesta: llamar stored procedure

Cita:
Iniciado por cristiantorres Ver Mensaje
Pues no es mucha la diferencia.
Seria.
Código vb.net:
Ver original
  1. Dim cmd As New SqlCommand("NombreProcedimientoAlmacenado", conn) 'nombre del procedimiento, conn es la cadena de conexion
  2. cmd.CommandType = CommandType.StoredProcedure 'especificas que se ejecutara un procedimiento
  3. 'envias los parametros
  4. cmd.Parameters.AddWithValue("@param1", textbox1.Text)
  5. cmd.Parameters.AddWithValue("@param2", textbox2.Text)
  6.  
  7. conn.Open() 'abris la conexion
  8. Try
  9.      cmd.ExecuteNonQuery()
  10.      MessageBox.Show("Registro Ingresado con Exito...")
  11. Catch ex As Exception
  12.        MessageBox.Show("Error no se Pudo Ingresar el Registro...")
  13. End Try

Como veras es casi lo mismo lo que cambia es que el el comand pones el nombre del procedimiento y tambien especificas que se ejecutara un procedimiento lo demas es igual.
tampoco funciono este
Código vb:
Ver original
  1. conexion.ConnectionString = "server=" & servidor & ";user id=" & usuario & ";password=" & contraseña & ";database=" & basededatos & ";"
  2.  
  3.         Dim cmd As New MySqlCommand("corte", conexion) 'nombre del procedimiento, conn es la cadena de conexion
  4.        cmd.CommandType = CommandType.StoredProcedure 'especificas que se ejecutara un procedimiento
  5.        'envias los parametros
  6.        cmd.Parameters.AddWithValue("$fechaini", Format(dtmFechaIni.Value, "yyyy-MM-dd"))
  7.         cmd.Parameters.AddWithValue("$fechafin", Format(dtmFechaFin.Value, "yyyy-MM-dd"))
  8.  
  9.         conexion.Open() 'abris la conexion
  10.        Try
  11.             cmd.ExecuteNonQuery()
  12.  
  13.         Catch ex As Exception
  14.             MessageBox.Show("Error no se Pudo Ingresar el Registro...")
  15.         End Try
  16.         conexion.Close()
__________________
a veces creemos que es algo básico pero al profundizar nos damos cuenta que estábamos tocando solo la cola de la culebra

Etiquetas: net, procedure, stored, vb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:38.