Principales respuestas
Imprimir una consulta SQL hecha con C# por consola.

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.!
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
-
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
-
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
-
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;
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.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.!
- Editado Carlospuntonet sábado, 20 de octubre de 2012 17:17
- Marcado como respuesta Carlospuntonet sábado, 20 de octubre de 2012 19:15
-
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
-
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
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
-
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;
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.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.!
- Editado Carlospuntonet sábado, 20 de octubre de 2012 17:17
- Marcado como respuesta Carlospuntonet sábado, 20 de octubre de 2012 19:15
-
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
-
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
-
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
-
-
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(); }
- Editado Alberto PoblacionMVP domingo, 21 de octubre de 2012 8:35
-
-
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.
-
-
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);
-
-
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
-
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();
}