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

Problema con la conexión a la bd desde una clase

Estas en el tema de Problema con la conexión a la bd desde una clase en el foro de .NET en Foros del Web. Hola a tod@s. Tengo un problema para conectarme a la bd desde una clase externa que estoy conpartiendo con todo el proyecto para no tener ...
  #1 (permalink)  
Antiguo 16/02/2010, 08:41
 
Fecha de Ingreso: junio-2008
Mensajes: 250
Antigüedad: 15 años, 10 meses
Puntos: 1
Problema con la conexión a la bd desde una clase

Hola a tod@s. Tengo un problema para conectarme a la bd desde una clase externa que estoy conpartiendo con todo el proyecto para no tener que crear la conexión en cada una de los formularios. La clase con la conexión es la siguiente
Código PHP:
Public Class Cconexion 
     
    
Public con As SqlConnection 
    Sub abrir
() 
        If 
IsNothing(conThen 
            con 
= New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString
            
con.Open() 
        
End If 
    
End Sub 
    
Public Function ejecutar(ByVal orden As String) As Integer 
        abrir
() 
        
Dim cmd As New SqlCommand(ordencon
        Return 
cmd.ExecuteNonQuery 
    End 
Function 
    Public Function 
consultar(ByVal orden As String) As SqlDataReader 
        abrir
() 
        
Dim cmd As New SqlCommand(ordencon
        Return 
cmd.ExecuteReader 
    End 
Function 
     
    Public Function 
escalar(ByVal orden As String) As Object 
        abrir
() 
        
Dim cmd As New SqlCommand(ordencon
        Return 
cmd.ExecuteScalar 
    End 
Function 
    Public Function 
consulta2(ByVal orden As String) As Data.DataTable 
        abrir
() 
        
Dim Tabla As New Data.DataTable 
        Dim cmd 
As New SqlCommand(ordencon
        
Dim da As New SqlDataAdapter(cmd
        
da.Fill(Tabla
        Return 
Tabla.Copy 
    End 
Function 
     
End Class 
y el formulario donde quiero hacer la conexión es (para rellenar el DataTable)
Código PHP:
Partial Class _Default 
    Inherits System
.Web.UI.Page 
    Dim conexion 
As New Cconexion 
    
Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgsHandles Me.Load 
        Dim respuesta 
As Integer "4" 
         
        
Dim dt As New Data.DataTable 
        dt 
Me.conexion.consulta2("select * from T_preguntas"
        
Dim dt2 As New Data.DataTable 
        dt2 
Me.conexion.consulta2("select * from T_respuestas"
         

        
Me.lblsesion.Text Session("alumno"
        
Dim objCommandT As New SqlCommand(dtobjConexion
        
Dim objCommandR As New SqlCommand(dt2objConexion
        
Dim objAdapterT As New SqlDataAdapter 
        Dim objAdapterR 
As New SqlDataAdapter 
        objAdapterT
.SelectCommand objCommandT 
        objAdapterR
.SelectCommand objCommandR 
        Dim objDs 
As New Data.DataSet 
        objAdapterT
.Fill(objDs"Preguntas"
        
objAdapterR.Fill(objDs"Respuestas"
        
Dim relacion As Data.DataRelation objDs.Relations.Add("Examen"objDs.Tables("Preguntas").Columns("c_idpregunta"), objDs.Tables("Respuestas").Columns("c_Pregunta")) 
        
Dim filaRfilaT As Data.DataRow 
        
For Each filaR In objDs.Tables("Preguntas").Rows 
            Response
.Write("<br>" filaR("c_Pregunta").ToString
            For 
Each filaT In filaR.GetChildRows(relacion
                
Response.Write("<br>" filaT("c_Respuestas").ToString
            
Next 
        Next 


    End Sub  
End 
Class 
En este caso me da el siguiente error. Muchas gracias
Cita:
Un valor de tipo System.Data.DataTable no se puede convertir en String
  #2 (permalink)  
Antiguo 18/02/2010, 15:03
 
Fecha de Ingreso: junio-2008
Mensajes: 250
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con la conexión a la bd desde una clase

¿No hay nadie que pueda ayudarme a solucionar este problema? ¿o explicarme otra forma similar para hacer esto misma conexión? Muchas gracias
  #3 (permalink)  
Antiguo 18/02/2010, 16:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Problema con la conexión a la bd desde una clase

filaR es un objeto DataRow. No tiene ninguna propiedad a la que puedas ponerle filaR("c_Pregunta").
En todo caso deberías usar filaR.Item("c_Pregunta").

Lo mismo vale para filaT("c_Respuestas")...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 18/02/2010, 17:13
 
Fecha de Ingreso: junio-2008
Mensajes: 250
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con la conexión a la bd desde una clase

Muchas gracias pero no lo he entendido bien me lo podrías explicar. (cómo hacer la conexión a la clase, y si ¿la función consulta2 es correcta?)
  #5 (permalink)  
Antiguo 20/02/2010, 12:42
 
Fecha de Ingreso: junio-2008
Mensajes: 250
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con la conexión a la bd desde una clase

bueno he modificado la función consulta2 de la clase cconexión por:
Código PHP:
Public Function consulta2(ByVal orden As String) As Data.DataTable
        abrir
()
        
Dim cmd As New SqlCommand(orden)
        
cmd.Connection Me.con
        Dim da 
As SqlDataAdapter = New SqlDataAdapter
        da
.SelectCommand cmd
        Dim datos 
As Data.DataTable = New Data.DataTable
        cmd
.ExecuteNonQuery()
        
da.Fill(datos)
        Return 
datos 
y al hacer la llamada a la función desde el documento Page_load me da problemas. Necesita ayuda y no soy capaz de conseguir dicha conexión y no se si lo que voy probando va por buen camino o no si alguien me puede ayudar se lo agradecería mucho ya que esto me solucionaría muchas dudas. (lo que si me funciona es cuando creo en otra conexión dentro del Page_load pero lo que deseo es crear una sola conexion para todo el proyecto)
Esto si funciona:
Código PHP:
Dim strConexion As String
        strConexion 
"Data Source=ADRSERVER/SQLEXPRESS; Initial Catalog=nortwind;" "Integrated Security=Yes"
        
Dim objConexion As New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
        
Dim rs1 As String
        rs1 
"select * from T_preguntas"
        
Dim rs2 As String
        rs2 
"select * from T_respuestas"

        
Me.lblsesion.Text Session("alumno")
        
Dim objCommandT As New SqlCommand(rs1objconexion)
        
Dim objCommandR As New SqlCommand(rs2objconexion)
        
Dim objAdapterT As New SqlDataAdapter
        Dim objAdapterR 
As New SqlDataAdapter
        objAdapterT
.SelectCommand objCommandT
        objAdapterR
.SelectCommand objCommandR
        Dim objDs 
As New Data.DataSet
        objAdapterT
.Fill(objDs"Preguntas")
        
objAdapterR.Fill(objDs"Respuestas")
        
Dim relacion As Data.DataRelation objDs.Relations.Add("Examen"objDs.Tables("Preguntas").Columns("c_idpregunta"), objDs.Tables("Respuestas").Columns("c_Pregunta"))
        
Dim filaRfilaT As Data.DataRow
        
For Each filaR In objDs.Tables("Preguntas").Rows
            Response
.Write("<br>" filaR("c_Pregunta").ToString)
            For 
Each filaT In filaR.GetChildRows(relacion)
                
Response.Write("<br>" filaT("c_Respuestas").ToString)
            
Next
        Next 
  #6 (permalink)  
Antiguo 20/02/2010, 18:14
 
Fecha de Ingreso: junio-2008
Mensajes: 250
Antigüedad: 15 años, 10 meses
Puntos: 1
Respuesta: Problema con la conexión a la bd desde una clase

Por fin consegui lo que buscaba el codigo es el siguiente:
Aquí tenemos la clase en la que hacemos las conexiones
Código PHP:

Public Class Cconexion
    
    
Public con As SqlConnection
    Sub abrir
()
        If 
IsNothing(conThen
            con 
= New SqlConnection(ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString)
            
con.Open()
        
End If
    
End Sub
    
Public Function ejecutar(ByVal orden As String) As Integer
        abrir
()
        
Dim cmd As New SqlCommand(ordencon)
        Return 
cmd.ExecuteNonQuery
    End 
Function
    Public Function 
consultar(ByVal orden As String) As SqlDataReader
        abrir
()
        
Dim cmd As New SqlCommand(ordencon)
        Return 
cmd.ExecuteReader
    End 
Function
    
    Public Function 
escalar(ByVal orden As String) As Object
        abrir
()
        
Dim cmd As New SqlCommand(ordencon)
        Return 
cmd.ExecuteScalar
    End 
Function
    
    Public Function 
consulta2(ByVal orden As String) As SqlDataAdapter
        abrir
()
        
Dim cmd As New SqlCommand(ordencon)
        
cmd.Connection Me.con
        Dim da 
As SqlDataAdapter = New SqlDataAdapter
        da
.SelectCommand cmd
        Dim datos 
As Data.DataTable = New Data.DataTable
        cmd
.ExecuteNonQuery()
        
da.Fill(datos)
        Return 
da
    End 
Function    
End Class 
Y en este otro código tenemos el código del Page_load donde tenemos el Tabla
Código PHP:
    Protected Sub Page_Load(ByVal sender As ObjectByVal e As System.EventArgsHandles Me.Load
        Dim respuesta 
As Integer "4"
        
        
Dim rs1 As New SqlDataAdapter
        rs1 
Me.conexion.consulta2("select * from T_preguntas")
        
Dim rs2 As New SqlDataAdapter
        rs2 
Me.conexion.consulta2("select * from T_respuestas")
        
Me.lblsesion.Text Session("alumno")        
        
Dim objDs As New Data.DataSet
        rs1
.Fill(objDs"Preguntas")
        
rs2.Fill(objDs"Respuestas")
        
Dim relacion As Data.DataRelation objDs.Relations.Add("Examen"objDs.Tables("Preguntas").Columns("c_idpregunta"), objDs.Tables("Respuestas").Columns("c_Pregunta"))
        
Dim filaRfilaT As Data.DataRow
        
For Each filaR In objDs.Tables("Preguntas").Rows
            Response
.Write("<br>" filaR("c_Pregunta").ToString)
            For 
Each filaT In filaR.GetChildRows(relacion)
                
Response.Write("<br>" filaT("c_Respuestas").ToString)
            
Next
        Next
    End Sub
End 
Class 
Se puede reducir más el código añadiendo un solo rs con un inner join pero eso tengo que mirarlo

Etiquetas: bd, clase
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 19:39.