none
CREAR ARCHIVO TXT POR CADA NUMERO DE CEDULA EN C# RRS feed

  • Pregunta

  • Buen dia FORO, soy muy nuevo en esto de C# pero con muchas ganas de aprender, tengo un problema que le he dado vueltas estos dias y he leido en este foro y demas y no he dado con la solucion, si alguien me puede ayudar con su valioso conocimiento muchas gracias, tengo que crear una aplicacion de consola en c# donde me ejecutara una consulta en base de datos y tiene que crear por cada numero de cedula un archivo txt ejemplo tengo 5 cedulas en mi tabla prueba, entonces por cada una tiene que crearme un archivo txt ya logre que la guardara con la cedula quemada es decir: select * from prueba where cedula = 'cedula' y la guarda pero no logro que recorra las cedulas y por cada una me guarde un txt, Muchas gracias a los que puedan colaborarme.Exitos.
    martes, 28 de agosto de 2018 17:58

Respuestas

  • ejemplo tengo 5 cedulas en mi tabla prueba, entonces por cada una tiene que crearme un archivo txt ya logre que la guardara con la cedula quemada es decir: select * from prueba where cedula = 'cedula' y la guarda pero no logro que recorra las cedulas y por cada una me guarde un txt, Muchas gracias a los que puedan colaborarme.Exitos.

    Creo que te refieres a una consulta sin where que te traiga todas las cedulas

    Select * from Prueba

    la pregunta es como estas obteniendo la información??

    usas Dataset. DataReader, que base de datos es ???

    Seria bueno que pusieras algo de tu código para poder ayudarte

    martes, 28 de agosto de 2018 18:24
  • si claro mira, con este que tengo me hace la consulta a la tabla prueba y por cada fecha que sea igual a la que esta declarada en el codigo me crea un arhcivo txt, pero necesito que me cree ahora un archivo por cada cedula, gracias

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    using System.Data.SqlClient;
    
    namespace Integracion
    {
        class Program
        {
            static void Main(string[] args)
            {
                //string conexion = string.Format("data source=BDIAZ\\EQUIPOLOCAL;initial catalog=master;password= contraseñabd;persist security info=True;user id=sa");
                //using (SqlConnection con = new SqlConnection(conexion))
                //TextWriter archivo1;
                //archivo = new StreamWriter("archivo.txt");
    
                //Conexion 
                using (SqlConnection conexion = new SqlConnection())
                {
                    conexion.ConnectionString =
                        "SERVER=DESKTOP-PF6DT03; Initial Catalog=Integracion; User Id=admin; password=123456;";
                    conexion.Open();
    
                    CrearArchivos(conexion, "2018-08-26");
    
                    conexion.Close();
                }
                
                Console.ReadKey();
                
            }
    
            public static void CrearArchivos(SqlConnection conexion, string fecha)
            {
                using (SqlCommand comando = conexion.CreateCommand())
                {
                    comando.CommandType = CommandType.Text;
                    comando.CommandText = "SELECT Cedula, Nombre_Operario FROM Operacion WHERE Fecha = @fecha";
    
                    SqlParameter paramFecha = comando.CreateParameter();
                    paramFecha.ParameterName = "@fecha";
                    paramFecha.SqlDbType = SqlDbType.Date;
                    paramFecha.Value = fecha;
                    comando.Parameters.Add(paramFecha);
    
                    using (SqlDataReader lector = comando.ExecuteReader())
                    {
                        while (lector.Read())
                        {
                            Console.WriteLine("{0}", lector.GetString(1));
    
                            using (FileStream fs = new FileStream(String.Format("{0}.txt", lector.GetString(0).Trim()),
                                FileMode.CreateNew))
                            {
                                using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
                                {
                                    sw.WriteLine(String.Format("{0}-{1}", lector.GetString(0).Trim(), lector.GetString(1).Trim()));
                                }
                            }
                        }
                    }
                }
            }
        }
    
    
    }

    martes, 28 de agosto de 2018 19:24

Todas las respuestas

  • ejemplo tengo 5 cedulas en mi tabla prueba, entonces por cada una tiene que crearme un archivo txt ya logre que la guardara con la cedula quemada es decir: select * from prueba where cedula = 'cedula' y la guarda pero no logro que recorra las cedulas y por cada una me guarde un txt, Muchas gracias a los que puedan colaborarme.Exitos.

    Creo que te refieres a una consulta sin where que te traiga todas las cedulas

    Select * from Prueba

    la pregunta es como estas obteniendo la información??

    usas Dataset. DataReader, que base de datos es ???

    Seria bueno que pusieras algo de tu código para poder ayudarte

    martes, 28 de agosto de 2018 18:24
  • hola

    >>ya logre que la guardara con la cedula quemada es decir: select * from prueba where cedula = 'cedula' y la guarda pero no logro que recorra las cedulas

    pero si usas un WHERE indicando la cedula solo obtendras un registro, si quieres iterar todos usarias

    using(SqlConnection cn = new SqlConnection("connection string"))
    {
    	cn.Open();
    	
    	string query = @"SELECT * FROM prueba";
    						
    	SqlCommand cm = new SqlCommand(query, cn);
    	SqlDataReader dr = cm.ExecuteReader();
    
    	while(dr.Read())
    	{
    		//codigo
    	}
    }

    asi lo recorres

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 28 de agosto de 2018 18:27
  • Muchas gracias por tu respuesta, claro si lo hace ya que me crea un tx con todas las cedulas guardas en la tabla pero quiero que por cada cedula  osea por cada linea me cree un txt con la informacion de ese registro, muchas gracias
    martes, 28 de agosto de 2018 19:10
  • Hola muchas gracias por tu respuesta, pero no es lo que se busca, se busca es que por cada cedula guardada en la tabla cree  un archivo txt, muchas gracias 
    martes, 28 de agosto de 2018 19:11
  • Pues para crear un archivo

    tienes Que usar System.IO el objeto StreamWriter

    Pero te repito pon tu codigo para darle seguimiento

    martes, 28 de agosto de 2018 19:20
  • si claro mira, con este que tengo me hace la consulta a la tabla prueba y por cada fecha que sea igual a la que esta declarada en el codigo me crea un arhcivo txt, pero necesito que me cree ahora un archivo por cada cedula, gracias

    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.IO;
    using System.Data.SqlClient;
    
    namespace Integracion
    {
        class Program
        {
            static void Main(string[] args)
            {
                //string conexion = string.Format("data source=BDIAZ\\EQUIPOLOCAL;initial catalog=master;password= contraseñabd;persist security info=True;user id=sa");
                //using (SqlConnection con = new SqlConnection(conexion))
                //TextWriter archivo1;
                //archivo = new StreamWriter("archivo.txt");
    
                //Conexion 
                using (SqlConnection conexion = new SqlConnection())
                {
                    conexion.ConnectionString =
                        "SERVER=DESKTOP-PF6DT03; Initial Catalog=Integracion; User Id=admin; password=123456;";
                    conexion.Open();
    
                    CrearArchivos(conexion, "2018-08-26");
    
                    conexion.Close();
                }
                
                Console.ReadKey();
                
            }
    
            public static void CrearArchivos(SqlConnection conexion, string fecha)
            {
                using (SqlCommand comando = conexion.CreateCommand())
                {
                    comando.CommandType = CommandType.Text;
                    comando.CommandText = "SELECT Cedula, Nombre_Operario FROM Operacion WHERE Fecha = @fecha";
    
                    SqlParameter paramFecha = comando.CreateParameter();
                    paramFecha.ParameterName = "@fecha";
                    paramFecha.SqlDbType = SqlDbType.Date;
                    paramFecha.Value = fecha;
                    comando.Parameters.Add(paramFecha);
    
                    using (SqlDataReader lector = comando.ExecuteReader())
                    {
                        while (lector.Read())
                        {
                            Console.WriteLine("{0}", lector.GetString(1));
    
                            using (FileStream fs = new FileStream(String.Format("{0}.txt", lector.GetString(0).Trim()),
                                FileMode.CreateNew))
                            {
                                using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
                                {
                                    sw.WriteLine(String.Format("{0}-{1}", lector.GetString(0).Trim(), lector.GetString(1).Trim()));
                                }
                            }
                        }
                    }
                }
            }
        }
    
    
    }

    martes, 28 de agosto de 2018 19:24
  • hola

    >>pero necesito que me cree ahora un archivo por cada cedula

    Pero deberias iterar y crear el file cuando cambia la cedula, por supuesto en la query usa el ORDER BY para que aparezcan todas juntas

    tomas una y preguntas en cada loop si cambio, cuando lo hace creas un nuevo archivo

    Sino la otra es crear una clase y aplicar linq para agrupar

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 28 de agosto de 2018 19:37
  • public static void CrearArchivos(SqlConnection conexion, string fecha)
            {
                using (SqlCommand comando = conexion.CreateCommand())
                {
                    comando.CommandType = CommandType.Text;
                    comando.CommandText = "SELECT Cedula, Nombre_Operario FROM Operacion WHERE Fecha = @fecha";
    
                    SqlParameter paramFecha = comando.CreateParameter();
                    paramFecha.ParameterName = "@fecha";
                    paramFecha.SqlDbType = SqlDbType.Date;
                    paramFecha.Value = fecha;
                    comando.Parameters.Add(paramFecha);
    
                    using (SqlDataReader lector = comando.ExecuteReader())
                    {
                        while (lector.Read())
                        {
                            Console.WriteLine("{0}", lector.GetString(1));
    
                            using (FileStream fs = new FileStream(String.Format("{0}.txt", lector.GetString(0).Trim()),
                                FileMode.CreateNew))
                            {
                                using (StreamWriter sw = new StreamWriter(fs, Encoding.UTF8))
                                {
                                    sw.WriteLine(String.Format("{0}-{1}", lector.GetString(0).Trim(), lector.GetString(1).Trim()));
                                }
                            }
                        }
                    }
                }
            }

    Primero cuando pegues código utiliza el boton <> que esta al lado de html en la parte de arriba seleccionas tu lenguaje que es c# y le das aceptar.

    segundo pon un breakpoint en esta parte 

    while (lector.Read())

    y lo vas recorriendo, esto para saber cuantos registros estas trayendo en la consulta ya que filtras por fecha. y no se si eso este haciendo que solo tengas un registro y no los 5 que comentas.

    primero hay que revisar si la consulta te regresa lo que buscas


    • Editado niqel martes, 28 de agosto de 2018 20:05
    martes, 28 de agosto de 2018 20:05
  • Muchas gracias por sus respuestas no se si me puedran brindar un ejemplo ya que he intentado y estoy como bloqueado... gracias
    martes, 28 de agosto de 2018 20:23
  • Primero corre tu query

    y pasale una fecha cuantos registros estas recibiendo, necesitas saber eso

    lo puedes hacer poniendo el breakpoint o ejecutando la consulta desde sql server

    martes, 28 de agosto de 2018 20:59