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

Problematica con datareader..creo...

Estas en el tema de Problematica con datareader..creo... en el foro de .NET en Foros del Web. Hola que tal, quiero guardar el resultado de un query en un txt pero en vez de los valores arrojados me guarda el query como ...
  #1 (permalink)  
Antiguo 01/07/2009, 09:35
 
Fecha de Ingreso: diciembre-2007
Mensajes: 4
Antigüedad: 16 años, 4 meses
Puntos: 0
Problematica con datareader..creo...

Hola que tal, quiero guardar el resultado de un query en un txt pero en vez de los valores arrojados me guarda el query como tal, les dejo el codigo esperando me puedan ayudar con mi problema, o si tienen otra forma de guardar el resultado de un query en un txt estoy abierto a opciones, de antemano gracias a todos, saludos, por cierto estoy usando webforms en vb.net pero aunque tengan soluciones para C# son bienvenidas, saludos.



Const FILE_NAME As String = "MyFile.txt"
If File.Exists(FILE_NAME) Then
Console.WriteLine("{0} already exists.", FILE_NAME)
Return
End If
Using sw As StreamWriter = File.CreateText(FILE_NAME)



Dim query As String = "SELECT F4211A.SDAN8, F4211A.SDLITM, (F4211A.SDDSC1+'-'+F4211A.SDDSC2), F4211A.SDSOQS, F4211A.SDAPUM, (F4211A.SDLPRC/10000), cast((F4074A.ALFVTR/10000) as varchar), cast( (SELECT (F4074AB.ALFVTR/10000) FROM " + BDowner1 + ".F4074 F4074AB WHERE F4074AB.ALDOCO=F4211A.SDDOCO AND F4074AB.ALDCTO=F4211A.SDDCTO AND F4074AB.ALKCOO=F4211A.SDKCOO AND F4074AB.ALLNID =F4211A.SDLNID AND F4074AB.ALOSEQ>=20 AND F4074AB.ALOSEQ<=50) as varchar), (F4211A.SDUPRC/10000), (F4211A.SDAEXP/100), (SELECT F58STATAB.STDSC1 FROM " + BDowner1 + ".F58STAT F58STATAB WHERE F4211A.SDLTTR=F58STATAB.STLTTR AND F4211A.SDNXTR=F58STATAB.STNXTR)FROM " + BDowner1 + ".F4211 F4211A INNER JOIN " + BDowner1 + ".F4074 F4074A ON F4074A.ALDOCO=F4211A.SDDOCO AND F4074A.ALDCTO=F4211A.SDDCTO AND F4074A.ALKCOO=F4211A.SDKCOO AND F4074A.ALLNID =F4211A.SDLNID WHERE F4211A.SDKCOO = " & Compania & " AND F4211A.SDMCU='" & Almacen & "' AND F4074A.ALOSEQ>0 AND F4074A.ALOSEQ<20 AND F4211A.SDDOCO='" & TxtPedFact.Text.Trim & "'"
'son 8 campos
Dim campos As Integer
Dim resultado As String = ""
Dim conn As New SqlConnection
Dim comando As New SqlCommand(query, conn)
Dim dreader As SqlDataReader



Try
If (conn.State = ConnectionState.Closed) Then
conn.Open()
End If
comando.ExecuteReader()
If (dreader.Read()) Then
For campos = 0 To 7
resultado += dreader.GetValue(campos) + "\t"
Next

End If

Catch ex As Exception
Finally
conn.Close()
End Try


' sw.WriteLine("This is my file.")
' sw.WriteLine("I can write ints {0} or floats {1}, and so on.", 1, 4.2)
sw.WriteLine(query)
sw.Close()
End Using
  #2 (permalink)  
Antiguo 01/07/2009, 09:49
 
Fecha de Ingreso: diciembre-2007
Mensajes: 4
Antigüedad: 16 años, 4 meses
Puntos: 0
Respuesta: Problematica con datareader..creo...

Encontre en msdn que deberia de tener el codigo Dim dreader As SqlDataReader = comando.ExecuteReader en vez de solo declarar a dreader como sqldatareader pero me sigue guardando el query en vez de los valores de cada campo de el query, espero que alguien me ayude, saludos.



Const FILE_NAME As String = "MyFile.txt"
If File.Exists(FILE_NAME) Then
Console.WriteLine("{0} already exists.", FILE_NAME)
Return
End If
Using sw As StreamWriter = File.CreateText(FILE_NAME)



Dim query As String = "SELECT F4211A.SDAN8, F4211A.SDLITM, (F4211A.SDDSC1+'-'+F4211A.SDDSC2), F4211A.SDSOQS, F4211A.SDAPUM, (F4211A.SDLPRC/10000), cast((F4074A.ALFVTR/10000) as varchar), cast( (SELECT (F4074AB.ALFVTR/10000) FROM " + BDowner1 + ".F4074 F4074AB WHERE F4074AB.ALDOCO=F4211A.SDDOCO AND F4074AB.ALDCTO=F4211A.SDDCTO AND F4074AB.ALKCOO=F4211A.SDKCOO AND F4074AB.ALLNID =F4211A.SDLNID AND F4074AB.ALOSEQ>=20 AND F4074AB.ALOSEQ<=50) as varchar), (F4211A.SDUPRC/10000), (F4211A.SDAEXP/100), (SELECT F58STATAB.STDSC1 FROM " + BDowner1 + ".F58STAT F58STATAB WHERE F4211A.SDLTTR=F58STATAB.STLTTR AND F4211A.SDNXTR=F58STATAB.STNXTR)FROM " + BDowner1 + ".F4211 F4211A INNER JOIN " + BDowner1 + ".F4074 F4074A ON F4074A.ALDOCO=F4211A.SDDOCO AND F4074A.ALDCTO=F4211A.SDDCTO AND F4074A.ALKCOO=F4211A.SDKCOO AND F4074A.ALLNID =F4211A.SDLNID WHERE F4211A.SDKCOO = " & Compania & " AND F4211A.SDMCU='" & Almacen & "' AND F4074A.ALOSEQ>0 AND F4074A.ALOSEQ<20 AND F4211A.SDDOCO='" & TxtPedFact.Text.Trim & "'"
'son 8 campos
Dim campos As Integer
Dim resultado As String = ""
Dim conn As New SqlConnection
Dim comando As New SqlCommand(query, conn)




Try
If (conn.State = ConnectionState.Closed) Then
conn.Open()

End If
'comando.ExecuteReader()
Dim dreader As SqlDataReader = comando.ExecuteReader
If (dreader.Read()) Then
For campos = 0 To 7
resultado += dreader.GetValue(campos) + "\t"
Next

End If

Catch ex As Exception
Finally
conn.Close()
End Try


' sw.WriteLine("This is my file.")
' sw.WriteLine("I can write ints {0} or floats {1}, and so on.", 1, 4.2)
sw.WriteLine(query)
sw.Close()
End Using
  #3 (permalink)  
Antiguo 01/07/2009, 09:57
 
Fecha de Ingreso: junio-2008
Mensajes: 61
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problematica con datareader..creo...

Hey, que tal

No es tan complicado solo haz esto en tu TRY (pienso como C#):
1.- Asigna tus valores al reader: dreader = comando.ExecuteReader();
2.- Valida con un dreader.HasRows
3.- En un filestream asignas tu path con un filemode.append
4.- Asignas a un streamwriter tu filestream
5.- Y mientras dreader.Read()
6.- Tu streamwriter en el metodo writeline asignas los valores asi: dreader["columna1"].tostring() y asi consecutivamente
7.- Cierras tus instancias y listo

Espero te sirva explicado de esa forma, saludos!


Cita:
Iniciado por alexmc Ver Mensaje
Hola que tal, quiero guardar el resultado de un query en un txt pero en vez de los valores arrojados me guarda el query como tal, les dejo el codigo esperando me puedan ayudar con mi problema, o si tienen otra forma de guardar el resultado de un query en un txt estoy abierto a opciones, de antemano gracias a todos, saludos, por cierto estoy usando webforms en vb.net pero aunque tengan soluciones para C# son bienvenidas, saludos.



Const FILE_NAME As String = "MyFile.txt"
If File.Exists(FILE_NAME) Then
Console.WriteLine("{0} already exists.", FILE_NAME)
Return
End If
Using sw As StreamWriter = File.CreateText(FILE_NAME)



Dim query As String = "SELECT F4211A.SDAN8, F4211A.SDLITM, (F4211A.SDDSC1+'-'+F4211A.SDDSC2), F4211A.SDSOQS, F4211A.SDAPUM, (F4211A.SDLPRC/10000), cast((F4074A.ALFVTR/10000) as varchar), cast( (SELECT (F4074AB.ALFVTR/10000) FROM " + BDowner1 + ".F4074 F4074AB WHERE F4074AB.ALDOCO=F4211A.SDDOCO AND F4074AB.ALDCTO=F4211A.SDDCTO AND F4074AB.ALKCOO=F4211A.SDKCOO AND F4074AB.ALLNID =F4211A.SDLNID AND F4074AB.ALOSEQ>=20 AND F4074AB.ALOSEQ<=50) as varchar), (F4211A.SDUPRC/10000), (F4211A.SDAEXP/100), (SELECT F58STATAB.STDSC1 FROM " + BDowner1 + ".F58STAT F58STATAB WHERE F4211A.SDLTTR=F58STATAB.STLTTR AND F4211A.SDNXTR=F58STATAB.STNXTR)FROM " + BDowner1 + ".F4211 F4211A INNER JOIN " + BDowner1 + ".F4074 F4074A ON F4074A.ALDOCO=F4211A.SDDOCO AND F4074A.ALDCTO=F4211A.SDDCTO AND F4074A.ALKCOO=F4211A.SDKCOO AND F4074A.ALLNID =F4211A.SDLNID WHERE F4211A.SDKCOO = " & Compania & " AND F4211A.SDMCU='" & Almacen & "' AND F4074A.ALOSEQ>0 AND F4074A.ALOSEQ<20 AND F4211A.SDDOCO='" & TxtPedFact.Text.Trim & "'"
'son 8 campos
Dim campos As Integer
Dim resultado As String = ""
Dim conn As New SqlConnection
Dim comando As New SqlCommand(query, conn)
Dim dreader As SqlDataReader



Try
If (conn.State = ConnectionState.Closed) Then
conn.Open()
End If
comando.ExecuteReader()
If (dreader.Read()) Then
For campos = 0 To 7
resultado += dreader.GetValue(campos) + "\t"
Next

End If

Catch ex As Exception
Finally
conn.Close()
End Try


' sw.WriteLine("This is my file.")
' sw.WriteLine("I can write ints {0} or floats {1}, and so on.", 1, 4.2)
sw.WriteLine(query)
sw.Close()
End Using
  #4 (permalink)  
Antiguo 01/07/2009, 10:37
 
Fecha de Ingreso: diciembre-2007
Mensajes: 4
Antigüedad: 16 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Problematica con datareader..creo...

Hey gracias por tu explicacion, pero me marca muchos errores, no lo he de estar haciendo bien, podrias facilitarmelo en codigo aunque sea C#
plz, y muchisimas gracias por la respuesta, saludos.
  #5 (permalink)  
Antiguo 01/07/2009, 10:52
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 meses
Puntos: 15
Respuesta: Problematica con datareader..creo...

DKain te brindo todos los conceptos que necesitas saber para alcanzar lo que deseas, creo que en tu codigo ya tienes cosas avanzadas pero errores como por ejemplo nunca asignaste al DataReader el resultado de el Command.ExecuteDataReader() que debe quedar así:

dreader = comando.ExecuteDataReader()

Así ya la instancia dreader tendrá el resultado de el query, ahora Dkain te dice que valides que la instancia tenga valores usando

if dreader.HasRows Then .....

Eso te dice que si tiene Rows entonces podras hacer uso de el sino entonces no debes escribir nada porque no vino datos de vuelta desde el query.

Lo otro es escribir directo en el StreamWriter que ya instanciaste llamado sw esto lo puedes usar cuando recorras los rows de el DataReader.

while dreader.Read()

sw.WriteLine(dreader("Campo").ToString)

end While

Después Dkain te dice que si ya tienes todo listo cierres la conexion a la base de datos y cualquier otro objeto que sea necesario.

Como usas Try Catch puedes agregar el finally y allí terminar tus instancias.

Saludos,
  #6 (permalink)  
Antiguo 01/07/2009, 11:17
 
Fecha de Ingreso: junio-2008
Mensajes: 61
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Problematica con datareader..creo...

Gracias por la observacion, aunque inecesaria y muy bien definida por ti, donde te comento que hay que leer bien y te hago las tres observaciones correspondientes:

1.- Estoy bajo el entendido de donde se encuentra (vease en el try) y donde solo hay que apoyar lo que el necesita.
2.- No doy codigo, debido a que es para entendimiento de alex en VB, el puntualizar que mi orientación es hacia c# y es a como recuerdo el uso de las herramientas en un flujo relativamente normal, no ayudo a solucionar el problema sino ayudo a entender lo que se necesita, esto es solo da un aporte a que pueda el investigar el resto de detalle en dicho lenguaje, ya que solo falta pulir lo que tenia como salida erronea en su TXT
3.- El uso de las herramientas StreamWriter, DataReader es correcto, posiblemente me falto mas detalle, gracias por el aporte Dwaks!, enfatizo el hecho de que es pseudocodigo.

alex, espero haberte ayudado, saludos!

Cita:
Iniciado por dwaks Ver Mensaje
DKain te brindo todos los conceptos que necesitas saber para alcanzar lo que deseas, creo que en tu codigo ya tienes cosas avanzadas pero errores como por ejemplo nunca asignaste al DataReader el resultado de el Command.ExecuteDataReader() que debe quedar así:

dreader = comando.ExecuteDataReader()

Así ya la instancia dreader tendrá el resultado de el query, ahora Dkain te dice que valides que la instancia tenga valores usando

if dreader.HasRows Then .....

Eso te dice que si tiene Rows entonces podras hacer uso de el sino entonces no debes escribir nada porque no vino datos de vuelta desde el query.

Lo otro es escribir directo en el StreamWriter que ya instanciaste llamado sw esto lo puedes usar cuando recorras los rows de el DataReader.

while dreader.Read()

sw.WriteLine(dreader("Campo").ToString)

end While

Después Dkain te dice que si ya tienes todo listo cierres la conexion a la base de datos y cualquier otro objeto que sea necesario.

Como usas Try Catch puedes agregar el finally y allí terminar tus instancias.

Saludos,
  #7 (permalink)  
Antiguo 01/07/2009, 11:27
 
Fecha de Ingreso: diciembre-2007
Mensajes: 4
Antigüedad: 16 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Problematica con datareader..creo...

Heeeeeey Muchas gracias, hare pruebas con los conceptos que me pusieron, gracias en vdd si lo soluciono lo posteo por si les sirve a alguien mas, saludos y de nuevo muchas gracias.
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 16:51.