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

Duda con objeto OdbcCommand

Estas en el tema de Duda con objeto OdbcCommand en el foro de .NET en Foros del Web. Buenos dias compañeros mi inquietud es la siguiente: Estoy desarrollando un aplicación en VB 2005 y BD SQL Server 2005, estoy utilizando una función como ...
  #1 (permalink)  
Antiguo 26/02/2009, 09:40
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Duda con objeto OdbcCommand

Buenos dias compañeros mi inquietud es la siguiente:
Estoy desarrollando un aplicación en VB 2005 y BD SQL Server 2005, estoy utilizando una función como esta para ejecutar scripts o cualquier consulta que se le pase por parametro(No necesariamente debe ser la ruta a un script.sql)

Código:
 Public Function Ejecutar(ByVal cScriptSQL As String) As String
        Dim Activo As Boolean
        If cScriptSQL <> vbNullString Then
            Conexion.Open()
            Comando = New Odbc.OdbcCommand(cScriptSQL, Conexion)
            Try
                Comando.CommandText = cScriptSQL
                Comando.ExecuteNonQuery()
                Activo = True
                MessageBox.Show("Consulta Script OK")
            Catch ex As Exception
                MessageBox.Show("Error al ejecutar el script SQL:" & vbCrLf & ex.Message)
                Activo = False
            End Try
        End If
        Return Activo
    End Function

Ahora la forma de utilizarla es la siguiente:

Código:
Ejecutar("WITH MExplosion (PARPRT_02, COMPRT_02, nivel, Referencia) AS (SELECT r.PARPRT_02, r.COMPRT_02,0 AS nivel, PARPRT_02 as Referencia FROM Product_Structure as r  UNION ALL  SELECT r.PARPRT_02, r.COMPRT_02, nivel + 1, Referencia FROM Product_Structure as r INNER JOIN MExplosion AS d ON r.PARPRT_02 = d.COMPRT_02 ) SELECT Referencia, COMPRT_02, nivel, PMDES1_01 FROM MExplosion INNER JOIN Part_Master ON MExplosion.COMPRT_02 = Part_Master.PRTNUM_01 INNER JOIN Part_Sales ON Part_Sales.PRTNUM_29 = Referencia WHERE COMPRT_02 LIKE '" & Me.partes.SelectedRows(0).Cells(0).Value.ToString & "%'")
Esta ejecución me devuelve 4 datos que son Referencia, COMPRT_02, nivel, PMDES1_01, aqui es donde radica mi duda al ejecutarla en el SQL Server me devuelve los resultados, obviamante cuando la ejecuto en mi aplicación me devuelve el mensaje de Script OK, mi pregunta es teniendo en cuenta la estructura de mi función como hago para rescatar los datos que me devuelve la ejecución teniendo en cuenta que el objeto Comando.ExecuteNonQuery() solo me devuelve le numero de filas afectadas al ejecutar el script??? o de que otra manera podría plantear mi función para ejecutar scripts Sql y poder rescatar los datos que me devuelve la ejecución del mismo???

Agradesco sus comentarios al respecto desde ya muchas gracias.



Saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #2 (permalink)  
Antiguo 26/02/2009, 10:01
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Duda con objeto OdbcCommand

ojo tu en tu codigo lo tienes claramente lo que haces es una Consulta y utilizas ExecuteNonQuery ( ejecuta una no consulta) para hacer eso tendrias que usar ExecuteReader y retornar el conjunto de resultados.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #3 (permalink)  
Antiguo 26/02/2009, 10:23
 
Fecha de Ingreso: noviembre-2008
Ubicación: Madrid, España
Mensajes: 149
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Duda con objeto OdbcCommand

Además de la solución al problema que te da Peterpay, ten en cuenta que te sobra la línea

Comando.CommandText = cScriptSQL

, ya que estás estableciendo esa propiedad en el constructor:

Comando = New Odbc.OdbcCommand(cScriptSQL, Conexion)

Un saludo
  #4 (permalink)  
Antiguo 26/02/2009, 10:42
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Duda con objeto OdbcCommand

cierto duplicando tareas reduce el performance jajajaja ntc pero si hay que tener cuidado con ello.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #5 (permalink)  
Antiguo 26/02/2009, 13:13
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Duda con objeto OdbcCommand

Gracias por las respuesta, disculpen mi ignorancia y como retorno el conjunto de resultados despues de utilizar Comando.ExecuteReader(), teniendo en cuenta si solo deseo listar en un cuadro de texto 1 o 2 valores de los que me devuelve la consulta???





Saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #6 (permalink)  
Antiguo 26/02/2009, 13:27
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Duda con objeto OdbcCommand

pues ExecuteReader retorna un DataReader q simplemente tienes que recorrer

mira esto
http://msdn.microsoft.com/en-us/library/ms254509.aspx
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #7 (permalink)  
Antiguo 26/02/2009, 13:48
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Duda con objeto OdbcCommand

OK Muchas Gracias, pasa lo siguiente el resultado de esta ejecución me devuelve 148 Filas.


'EJECUTAR CONSULTA PARA EXPLOSIÓN - USOS.
Código:
Ejecutar("WITH MExplosion (PARPRT_02, COMPRT_02, nivel, Referencia) AS (SELECT r.PARPRT_02, r.COMPRT_02,0 AS nivel, PARPRT_02 as Referencia FROM Product_Structure as r  UNION ALL  SELECT r.PARPRT_02, r.COMPRT_02, nivel + 1, Referencia FROM Product_Structure as r INNER JOIN MExplosion AS d ON r.PARPRT_02 = d.COMPRT_02 ) SELECT Referencia, COMPRT_02, nivel, PMDES1_01 FROM MExplosion INNER JOIN Part_Master ON MExplosion.COMPRT_02 = Part_Master.PRTNUM_01 INNER JOIN Part_Sales ON Part_Sales.PRTNUM_29 = Referencia WHERE COMPRT_02 LIKE '" & Me.partes.SelectedRows(0).Cells(0).Value.ToString & "%'")
                While Lector.Read
                    Me.usos.Text = Lector(0).ToString + ","
                End While
Y Necesito ir listando en mi objeto de texto los valores que me devuelve la primera columna, pero al plantear mi código así el programa se queda hay y no responde a que puede deberse esto????

La función quedo de esta forma
Código:
    Public Function Ejecutar(ByVal cScriptSQL As String) As String
        Dim Activo As Boolean
        If cScriptSQL <> vbNullString Then
            Conexion.Open()
            Comando = New Odbc.OdbcCommand(cScriptSQL, Conexion)
            Try
                Lector = Comando.ExecuteReader()
                MessageBox.Show("Consulta Script OK")
                Conexion.Close()
                Activo = True
            Catch ex As Exception
                MessageBox.Show("Error al ejecutar el script SQL:" & vbCrLf & ex.Message)
                Activo = False
            End Try
        End If
        Return Activo

Saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #8 (permalink)  
Antiguo 26/02/2009, 13:53
Avatar de Peterpay
Colaborador
 
Fecha de Ingreso: septiembre-2007
Ubicación: San Francisco, United States
Mensajes: 3.858
Antigüedad: 16 años, 8 meses
Puntos: 87
Respuesta: Duda con objeto OdbcCommand

quieres que conforme vayas revisando fila por fila tambien se actualice el textbox o listbox otu variable texto a la par, para eso no hay problema necesitaras usar this.invoke y un delegado te pongo un ejemplo

http://www.gurudotnet.com/index.php/...az-de-usuario/

en el ejemplo hay un ciclo que vendria hacer igual al ciclo de tu for para recorrer tu datareader

y solo tendrias q ir agregando o concatenando no hay mas.

pd: lo primero es para hacer que no se cuelgue la actualizacion mientras va por los resultados.
__________________
Curso WF4
http://cursos.gurudotnet.com/ DF
Aprende HTML5
  #9 (permalink)  
Antiguo 26/02/2009, 14:27
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Duda con objeto OdbcCommand

Disculpa mi insistencia, pero la verdad no entiendo mucho de C# y no se como implementarlo para mi caso, te agradecería si pudieras claro esta de explicarme un poco.






Saludos y Gracias.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #10 (permalink)  
Antiguo 27/02/2009, 07:27
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Duda con objeto OdbcCommand

Buenos dias compañeros continuando con el mismo tema he planteado esto pero la verdad no doy pie con bola, les agradesco si me pueden colaborar al respecto
cree el Delegado así:

Código:
Public Delegate Sub ActualizarText(ByVal Texto As TextBox)
y estoy recorriendo el Lector así:
Código:
Ejecutar_S("WITH MExplosion (PARPRT_02, COMPRT_02, nivel, Referencia) AS (SELECT r.PARPRT_02, r.COMPRT_02,0 AS nivel, PARPRT_02 as Referencia FROM Product_Structure as r UNION ALL SELECT r.PARPRT_02, r.COMPRT_02, nivel + 1, Referencia FROM Product_Structure as r INNER JOIN MExplosion AS d ON r.PARPRT_02 = d.COMPRT_02) SELECT Referencia, COMPRT_02, nivel, PMDES1_01 FROM MExplosion INNER JOIN Part_Master ON MExplosion.COMPRT_02 = Part_Master.PRTNUM_01 INNER JOIN Part_Sales ON Part_Sales.PRTNUM_29 = Referencia WHERE COMPRT_02 LIKE '" & Me.partes.SelectedRows(0).Cells(0).Value.ToString & "%'")
While Lector.Read
   Me.usos.Text = Lector(0).ToString + ","
   Me.Invoke(New ActualizarText(AddressOf, me.usos.Text), New Object)
   System.Threading.Thread.Sleep(1000)
End While
Pero la verdad no he podido avanzar en lo que esta subrayado me marca error la verdad no había implementado esto antes y no sé como seguir.


Saludos y gracias de antemano por la colaboración.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #11 (permalink)  
Antiguo 27/02/2009, 14:50
Avatar de Carlojas  
Fecha de Ingreso: junio-2007
Ubicación: Shikasta
Mensajes: 1.272
Antigüedad: 16 años, 10 meses
Puntos: 49
Respuesta: Duda con objeto OdbcCommand

Buenas tardes compañeros despues de dar muchas vueltas al asunto lo pude solucionar de la siguiente forma la verdad no se si será la mas adecuada pero lo importante fue que lo puede solucionar, la función quedo de esta forma

Código:
 Public Function Ejecutar_S(ByVal cScriptSQL As String, ByVal Obj As TextBox) As String
        Dim Activo As Boolean
        Dim A As String = ""
        If cScriptSQL <> vbNullString Then
            Conexion.Open()
            Comando = New Odbc.OdbcCommand(cScriptSQL, Conexion)
            Try
                Lector = Comando.ExecuteReader()                           
                While Lector.Read
                    A = Lector(0).ToString
                    Obj.Text = Trim(Obj.Text) + Trim(A) + ","
                End While
                Conexion.Close()
                Activo = True
            Catch ex As Exception
                MessageBox.Show("Error al ejecutar el script SQL:" & vbCrLf & ex.Message)
                Activo = False
            End Try
        End If
        Return Activo
    End Function
le ubique un segundo parametro que sería mi objeto de texto donde voy a rescatar los datos, y la forma de ejecución de la misma sería así:
Código:
Ejecutar_S("WITH MExplosion (PARPRT_02, COMPRT_02, nivel, Referencia) AS (SELECT r.PARPRT_02, r.COMPRT_02,0 AS nivel, PARPRT_02 as Referencia FROM Product_Structure as r UNION ALL SELECT r.PARPRT_02, r.COMPRT_02, nivel + 1, Referencia FROM Product_Structure as r INNER JOIN MExplosion AS d ON r.PARPRT_02 = d.COMPRT_02) SELECT Referencia, COMPRT_02, nivel, PMDES1_01 FROM MExplosion INNER JOIN Part_Master ON MExplosion.COMPRT_02 = Part_Master.PRTNUM_01 INNER JOIN Part_Sales ON Part_Sales.PRTNUM_29 = Referencia WHERE COMPRT_02 LIKE '" & Me.partes.SelectedRows(0).Cells(0).Value.ToString & "'", Me.usos)
Así de esta forma pude listar los resultados y la aplicación no se colgó, muchas gracias a las personas que colaboraron con sus comentarios.



Saludos.
__________________
"SELECT * FROM Mujeres WHERE situacion NOT IN ('CASADAS','CON HIJOS','ATORMENTADAS','CUASI-ENNOVIADAS') AND personalidad <> 'INTENSA'"
  #12 (permalink)  
Antiguo 30/03/2010, 20:24
 
Fecha de Ingreso: marzo-2008
Ubicación: Beijing
Mensajes: 20
Antigüedad: 16 años, 1 mes
Puntos: 0
Pregunta Respuesta: Duda con objeto OdbcCommand

Buenos dias compañeros Yo si necesito una función como esta para ejecutar scripts , pero no se como llamar al script dandole una la ruta a un script.sql, alguien sabe?
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 23:04.