llenar list(of oracleparameter) a partir de una clase

Iniciado por d91, 20 Septiembre 2015, 20:47 PM

0 Miembros y 1 Visitante están viendo este tema.

d91

hola, estoy construyendo un pequeño proyecto con visual basic.net  y oracle con store procedure, ya he visto algunos ejemplos para hacerlo en capas, lo unico que en los ejemplos esta lista se llena de manera estatica porque son procedimientos de select, pero necesito hacer un insert pero no se como recorrer la clase que la he recibido como objeto les dejo el procedimiento que si funciona pero es estatica con la lista y la que tengo que implementar
Código (vbnet) [Seleccionar]

Public Function SelectEmple(ByVal spName, ByVal IntIdTienda As Integer) As DataSet
Dim ds As DataSet
Try
con = New ConectDatos
Dim listaParam As List(Of OracleParameter) = New List(Of OracleParameter)
Dim param1 As OracleParameter = New OracleParameter("IntIdTienda", OracleDbType.Int32)
param1.Value = IntIdTienda
listaParam.Add(param1)
Dim param2 As OracleParameter = New OracleParameter("ResCursor", OracleDbType.RefCursor)
param2.Direction = ParameterDirection.Output
listaParam.Add(param2)
ds = New DataSet
ds = con.getdataset(spName, listaParam)
Return ds
Catch ex As Exception
Throw New ArgumentException("Error cursor USP_CARGA_EMPLEADOS" + ex.ToString)
End Try
End Function

'*****************************

'*****************************
Public Function EjecutaSql(ByVal spName As String, ByVal entidad As Object) As Integer
con = New ConectDatos
Dim row As Integer
Dim i As Integer

Dim listaParam As List(Of OracleParameter) = New List(Of OracleParameter)
'Dim param1 As OracleParameter
'i = 0
'
'For Each p As Object In entidad
'param1 = New OracleParameter(entidad(i++), OracleDbType.Int32)
'     listaParam.Add(param1)
' Next
row = con.EjecutarQuery(spName, listParam)
Return row
End Function

agradezco de antemano la orientacion

d91

investigue un poco mas, hice algunas modificaciones, pero al ejecutar el executenonquery el error dice "El objeto debe estar abierto" y creo que se refiere  a la conexion, aunque la conexion si funciona para el select, les dejo la modificacion y el ejecuta query
Código (vbnet) [Seleccionar]

Public Function EjecutaSql(ByVal spName As String, ByVal tienda As clstienda) As Integer

        Dim row As Integer

        Try
            con = New ConectDatos

            Dim listaParam As List(Of OracleParameter) = New List(Of OracleParameter)
            Dim param1 As OracleParameter = New OracleParameter("id_", OracleDbType.Int32)
            param1.Value = tienda.getid
            listaParam.Add(param1)
            Dim param2 As OracleParameter = New OracleParameter("tienda_", OracleDbType.Varchar2)
            param2.Value = tienda.getnombre
            listaParam.Add(param2)
            Dim param3 As OracleParameter = New OracleParameter("direccion_", OracleDbType.Varchar2)
            param3.Value = tienda.getdireccion
            listaParam.Add(param3)
            Dim param4 As OracleParameter = New OracleParameter("tel_", OracleDbType.Int32)
            param4.Value = tienda.gettel
            listaParam.Add(param4)
            Dim param5 As OracleParameter = New OracleParameter("gerente_", OracleDbType.Varchar2)
            param5.Value = tienda.getgerente
            listaParam.Add(param5)
            Dim param6 As OracleParameter = New OracleParameter("desc_", OracleDbType.Varchar2)
            param6.Value = tienda.getdesc
            listaParam.Add(param6)

            row = con.EjecutarQuery(spName, listaParam)
            Return row
        Catch ex As Exception
            Throw New Exception("Error al generar Consulta " + ex.Message.ToString)
        End Try
       
    End Function

'********

'///////////

Public Function EjecutarQuery(ByVal spName As String, ByVal parameters As List(Of OracleParameter)) As Integer
        Dim cmd As OracleCommand
        Dim row As Integer                                  'List(Of OracleParameter)
        Try
            Using conexion()
                conexion.Open()
                cmd = New OracleCommand(spName, conexion)

                If Not parameters Is Nothing Then
                    cmd.CommandType = System.Data.CommandType.StoredProcedure
                    For Each p In parameters
                        cmd.Parameters.Add(p)
                    Next
                End If
                row = cmd.ExecuteNonQuery()
                Return row
            End Using

        Catch ex As Exception
            Throw New ArgumentException("No se logro ejecutar la consulta en la DataBase " + ex.Message.ToString)
        End Try
    End Function

d91

bueno hay cosas que no se aclaran en los tutoriales, pero hay que ir listando las opciones implicitas de los diferentes metodos, el procedimiento ejecuta query le hacian falta un par de lineas para que funcionara, no entiendo porque para retornar un dataset no se necesita esas lineas
Código (vbnet) [Seleccionar]

Public Function EjecutarQuery(ByVal spName As String, ByVal parameters As List(Of OracleParameter)) As Integer
        Dim cmd As OracleCommand
        'Dim row As Integer                                  'List(Of OracleParameter)
        Try
            Using conexion()
                conexion.Open()
                cmd = New OracleCommand(spName, conexion)

                cmd = conexion.CreateCommand()

                If Not parameters Is Nothing Then
                    cmd.CommandText = spName
                    cmd.CommandType = System.Data.CommandType.StoredProcedure
                    For Each p In parameters
                        cmd.Parameters.Add(p)
                    Next
                End If
                cmd.Connection.Open()
                If cmd.ExecuteNonQuery() Then
                    Return 1
                Else
                    Return 0
                End If
            End Using

        Catch ex As Exception
            Throw New ArgumentException("No se logro ejecutar la consulta en la DataBase " + ex.Message.ToString)
        End Try
    End Function