none
Imprimir una consulta SQL hecha con C# por consola. RRS feed

  • Pregunta

  • Buenas que tal, tengo el siguiente método  

     public DataTable Consulta2(string tabla)
                {
                    string sql = "select * from " + tabla;
                    da = new SqlDataAdapter(sql, conex);
                    DataSet dts = new DataSet();
                    da.Fill(dts, tabla);
                    DataTable dt = new DataTable();
                    dt = dts.Tables[tabla];
                        return dt;                 
                }

    lo que no puedo hacer es imprimir el resultado del select. 

    Alguien me podría decir como imprimirlo por consola , con  console.writeLine o similar. 

    Muchas gracias.


    Carlos Alfonso Nada es perfecto.!

    sábado, 20 de octubre de 2012 5:31

Respuestas

  • Es decir, en resumidas cuentas la consulta es "¿cómo imprimir un datatable en consola?" Lo digo porque si le pregunta es "cómo escribir el resultado de una consulta SQL" entonces es más sencillo usar un SqlDataReader en lugar de cargar los datos en un DataTable.

    Pero bueno, suponiendo que queremos escribir el DataTable:

    DataTable dt = Consulta2("laTabla");
    foreach (DataRow dr un dt.Rows)
    {
        foreach (DataColumn dc in dt.Columns)
        {
            Console.Write(dr[dc.ColumnName]);
            Console.Write(","); //Separa las columnas
        }
        Console.WriteLine(); //Salto de línea
    }

    • Marcado como respuesta Carlospuntonet sábado, 20 de octubre de 2012 19:15
    sábado, 20 de octubre de 2012 6:23
  • No comprendo el problema. En el ejemplo que te puse ya está escrita una llamada a una rutina que devuelve un datatable, y se almacena el resultado en la variable dt. Una rutina como esa YA LA TIENES en tu código. Después de llamarla, cuando quieras escribir en consola ese DataTable que está dentro de dt, lo único que tienes que hacer es ejecutar el bucle "foreach" que te puse más arriba, y eso ya vuelca por consola el datatable.

    • Marcado como respuesta Carlospuntonet sábado, 20 de octubre de 2012 19:14
    sábado, 20 de octubre de 2012 18:58
  • En principio la instancia se crea en la línea anterior, donde pone

    SqlCommand cmd = new SqlCommand(sql, conex);

    Ojo, que en mi ejemplo la variable se llamaba "cmd" mientras que en el tuyo se llama "comando". Fíjate bien no vaya a ser que hayas mezclado dos ejemplos y estés instanciando la variable "cmd" pero luego intentando usar una variable "comando" no instanciada.

    • Marcado como respuesta Carlospuntonet jueves, 25 de octubre de 2012 1:35
    domingo, 21 de octubre de 2012 22:58
  • Lo  que quiero es imprimir por consola una data table. Como pondría el código que tu me pasaste en este ?

    using System;

    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data; 

    namespace Laboratorio
    {
        class ConexSQL
        {
            private string cadena = "data source = ALC03\\SQLEXPRESS2008; initial catalog = Tutorial; integrated security = true ";
            public SqlConnection conex;
            private SqlCommandBuilder cb;
            public DataSet ds = new DataSet();
            public SqlDataAdapter da;
            public SqlCommand comando;

            private void conectar()
            {
                conex = new SqlConnection(cadena);
            }

            public ConexSQL()
            {
                conectar();
            }

            public void consultar(string sql, string tabla)
            {
                ds.Tables.Clear();
                da = new SqlDataAdapter(sql, conex);
                cb = new SqlCommandBuilder(da);
                da.Fill(ds, tabla);
            }

            //eliminar 
            public bool Eliminar(string tabla, string condicion)
            {
                conex.Open();
                string sql = "delete from" + tabla + " where " + condicion;
                comando = new SqlCommand(sql, conex);
                int i = comando.ExecuteNonQuery();
                conex.Close();
                if (i > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }

            //actualizar
            public bool Actualizar(string tabla, string campos, string condicion)
            {
                conex.Open();
                string sql = "update " + tabla + " set " + " where " + condicion;
                comando = new SqlCommand(sql, conex);
                int i = comando.ExecuteNonQuery();
                conex.Close();
                if (i > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }

            }

            public DataTable Consulta2(string tabla)
            {
                string sql = "select * from " + tabla;
                da = new SqlDataAdapter(sql, conex);
                DataSet dts = new DataSet();
                da.Fill(dts, tabla);
                DataTable dt = new DataTable();
                dt = dts.Tables[tabla];

                return dt;
            }

            public bool Insertar(string sql)
            {
                conex.Open();
                comando = new SqlCommand(sql, conex);
                int i = comando.ExecuteNonQuery();
                conex.Close();
                if (i > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
             }
         }
    }

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;

    namespace Laboratorio
    {
        class Test
        {
            static void Main(string[] args)
            {
                ConexSQL objuser = new ConexSQL();
                Console.Write(objuser.Consulta2("Usuarios")); 

                Console.ReadKey();

            }
        }
    }

    Lo  que quiero es imprimir por consola una data table. Como pondría el código que tu me pasaste en este ? 

    Gracias!


    Carlos Alfonso Nada es perfecto.!


    sábado, 20 de octubre de 2012 14:07
  • Se entiende más o menos lo que pregunte? 

    Carlos Alfonso Nada es perfecto.!

    • Marcado como respuesta Carlospuntonet sábado, 20 de octubre de 2012 19:14
    sábado, 20 de octubre de 2012 18:37
  • Muy bien, muchas gracias!!!!!! 

    Cuando tu me pasaste el foreach  tenía mal el in entonces no me andaba... Pero me sacaste toda las dudas :). Te agradezco un montón!!


    Carlos Alfonso Nada es perfecto.!

    • Marcado como respuesta Carlospuntonet sábado, 20 de octubre de 2012 19:15
    sábado, 20 de octubre de 2012 19:15

Todas las respuestas

  • Es decir, en resumidas cuentas la consulta es "¿cómo imprimir un datatable en consola?" Lo digo porque si le pregunta es "cómo escribir el resultado de una consulta SQL" entonces es más sencillo usar un SqlDataReader en lugar de cargar los datos en un DataTable.

    Pero bueno, suponiendo que queremos escribir el DataTable:

    DataTable dt = Consulta2("laTabla");
    foreach (DataRow dr un dt.Rows)
    {
        foreach (DataColumn dc in dt.Columns)
        {
            Console.Write(dr[dc.ColumnName]);
            Console.Write(","); //Separa las columnas
        }
        Console.WriteLine(); //Salto de línea
    }

    • Marcado como respuesta Carlospuntonet sábado, 20 de octubre de 2012 19:15
    sábado, 20 de octubre de 2012 6:23
  • Lo  que quiero es imprimir por consola una data table. Como pondría el código que tu me pasaste en este ?

    using System;

    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data; 

    namespace Laboratorio
    {
        class ConexSQL
        {
            private string cadena = "data source = ALC03\\SQLEXPRESS2008; initial catalog = Tutorial; integrated security = true ";
            public SqlConnection conex;
            private SqlCommandBuilder cb;
            public DataSet ds = new DataSet();
            public SqlDataAdapter da;
            public SqlCommand comando;

            private void conectar()
            {
                conex = new SqlConnection(cadena);
            }

            public ConexSQL()
            {
                conectar();
            }

            public void consultar(string sql, string tabla)
            {
                ds.Tables.Clear();
                da = new SqlDataAdapter(sql, conex);
                cb = new SqlCommandBuilder(da);
                da.Fill(ds, tabla);
            }

            //eliminar 
            public bool Eliminar(string tabla, string condicion)
            {
                conex.Open();
                string sql = "delete from" + tabla + " where " + condicion;
                comando = new SqlCommand(sql, conex);
                int i = comando.ExecuteNonQuery();
                conex.Close();
                if (i > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }

            //actualizar
            public bool Actualizar(string tabla, string campos, string condicion)
            {
                conex.Open();
                string sql = "update " + tabla + " set " + " where " + condicion;
                comando = new SqlCommand(sql, conex);
                int i = comando.ExecuteNonQuery();
                conex.Close();
                if (i > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }

            }

            public DataTable Consulta2(string tabla)
            {
                string sql = "select * from " + tabla;
                da = new SqlDataAdapter(sql, conex);
                DataSet dts = new DataSet();
                da.Fill(dts, tabla);
                DataTable dt = new DataTable();
                dt = dts.Tables[tabla];

                return dt;
            }

            public bool Insertar(string sql)
            {
                conex.Open();
                comando = new SqlCommand(sql, conex);
                int i = comando.ExecuteNonQuery();
                conex.Close();
                if (i > 0)
                {
                    return true;
                }
                else
                {
                    return false;
                }
             }
         }
    }

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;

    namespace Laboratorio
    {
        class Test
        {
            static void Main(string[] args)
            {
                ConexSQL objuser = new ConexSQL();
                Console.Write(objuser.Consulta2("Usuarios")); 

                Console.ReadKey();

            }
        }
    }

    Lo  que quiero es imprimir por consola una data table. Como pondría el código que tu me pasaste en este ? 

    Gracias!


    Carlos Alfonso Nada es perfecto.!


    sábado, 20 de octubre de 2012 14:07
  • Se entiende más o menos lo que pregunte? 

    Carlos Alfonso Nada es perfecto.!

    • Marcado como respuesta Carlospuntonet sábado, 20 de octubre de 2012 19:14
    sábado, 20 de octubre de 2012 18:37
  • No comprendo el problema. En el ejemplo que te puse ya está escrita una llamada a una rutina que devuelve un datatable, y se almacena el resultado en la variable dt. Una rutina como esa YA LA TIENES en tu código. Después de llamarla, cuando quieras escribir en consola ese DataTable que está dentro de dt, lo único que tienes que hacer es ejecutar el bucle "foreach" que te puse más arriba, y eso ya vuelca por consola el datatable.

    • Marcado como respuesta Carlospuntonet sábado, 20 de octubre de 2012 19:14
    sábado, 20 de octubre de 2012 18:58
  • Muy bien, muchas gracias!!!!!! 

    Cuando tu me pasaste el foreach  tenía mal el in entonces no me andaba... Pero me sacaste toda las dudas :). Te agradezco un montón!!


    Carlos Alfonso Nada es perfecto.!

    • Marcado como respuesta Carlospuntonet sábado, 20 de octubre de 2012 19:15
    sábado, 20 de octubre de 2012 19:15
  • Lo último que pediría es si me podrías decir como hacerlo con un data reader. Desde ya  muchas gracias.

    Carlos Alfonso Nada es perfecto.!

    sábado, 20 de octubre de 2012 21:19
  • me podrías decir como hacerlo con un data reader.
    public void Consulta3(string tabla)
    {
        string sql = "select * from " + tabla;
        SqlCommand cmd = new SqlCommand(sql, conex);
        conex.Open(); //A no ser que ya la hayas abierto antes de llamar a esta rutina
        using (SqlDataReader rdr = cmd.ExecuteReader())
        {
            while (rdr.Read())
            {
                object[] valores = rdr.GetValues();
                for (int i=0; i<valores.Length; i++)
                {
                    Console.Write(valores[i].ToString()+" ");
                }
                Console.WriteLine();
            }
        }
        conex.Close();
    }


    domingo, 21 de octubre de 2012 8:34
  • Me dice que GetValue toma 0 argumento!!

    Carlos Alfonso Nada es perfecto.!

    domingo, 21 de octubre de 2012 12:56
  • Te falta una "s". Es GetValues() en plural, que es una función distinta de GetValue en singular. Esta última efectivamente requiere como argumento el campo a recuperar. En cambio, GetValues los recupera tdos de golpe a un array, y por lo tanto no requiere ningún argumento.
    domingo, 21 de octubre de 2012 16:16
  • Me sigue diciendo Ninguna sobrecarga para el método Get Values   toma 0 argumentos : /

    Carlos Alfonso Nada es perfecto.!

    domingo, 21 de octubre de 2012 17:05
  • Perdón, te lo he escrito mal. El método GetValues recibe como argumento el array en el que se insertan los objectos (en lugar de devolverlo como resultado). Lo que devuelve es el número de valores leídos:

        Object[] valores = new Object[rdr.FieldCount];
        int fieldCount = rdr.GetValues(valores);

    domingo, 21 de octubre de 2012 19:10
  •  using (SqlDataReader rdr = comando.ExecuteReader())       

    Me dice queno hay una instancia del objeto creada... 


    Carlos Alfonso Nada es perfecto.!

    domingo, 21 de octubre de 2012 19:27
  • En principio la instancia se crea en la línea anterior, donde pone

    SqlCommand cmd = new SqlCommand(sql, conex);

    Ojo, que en mi ejemplo la variable se llamaba "cmd" mientras que en el tuyo se llama "comando". Fíjate bien no vaya a ser que hayas mezclado dos ejemplos y estés instanciando la variable "cmd" pero luego intentando usar una variable "comando" no instanciada.

    • Marcado como respuesta Carlospuntonet jueves, 25 de octubre de 2012 1:35
    domingo, 21 de octubre de 2012 22:58
  • Hola que tal usa esto

     static void Main(string[] args)
            {
                Console.WriteLine("Hola");
                SqlConnection con = new SqlConnection("Data Source = APPS-SERVER\\APSE; Initial Catalog = DC3; User=sa;  Password=Apps15; Integrated Security = true");
                con.Open();
                SqlCommand cmd = new SqlCommand("select * from usuarios", con);
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    // while there is another record present
                    while (reader.Read())
                    {
                        // write the data on to the screen
                        Console.WriteLine(String.Format("{0} \t | {1} \t | {2} \t | {3}",
                        // call the objects from their index
                        reader[0], reader[1], reader[2], reader[3]));
                    }
                }
                con.Close();
                //Console.WriteLine("ok, salir");
                Console.ReadKey();
            }

    lunes, 15 de agosto de 2016 12:20