![]() |
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 |
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 |
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:
|
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. |
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, |
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:
|
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. |
| La zona horaria es GMT -6. Ahora son las 21:38. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.