Author Topic: Como obtener el nombre de las columnas de SQLite desde el código  (Read 8910 times)

Juanillo

  • Newbie
  • *
  • Posts: 13
  • Karma: 0
    • View Profile
Un saludo a todos gente :
Necesito saber como obtener los nombres de las columnas de una tabla determinada, por mas que busque no encuentro o no he sabido entender lo que he encontrado,esto es lo que tengo hasta ahora

CLASE PRINCIPAL

Code: [Select]
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;



namespace Bolas_V2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Conexion con = new Conexion("pruebaDB.db");
            Console.WriteLine(con.Dime_Conexion.FileName.ToString());
            Operaciones oper = new Operaciones(con.Dime_Conexion);
            oper.Consulta();
            con.cierraConexion();
        }
    }
}

CLASE CONEXION


Code: [Select]
using Microsoft.Data.Sqlite;
using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Bolas_V2
{
    internal class Conexion
    {
        private SQLiteConnection con;
        public SQLiteConnection Dime_Conexion => this.con;


        public Conexion(string bbDd)
        {
            try
            {
                this.con = new SQLiteConnection("Data Source="+bbDd);
                this.con.Open();
            }
            catch (SQLiteException ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
        public void cierraConexion()
        {
            this.con.Dispose();
        }
    }
}

CLASE OPERACIONES (la que estoy trabajando)

Code: [Select]
using System;
using System.Collections.Generic;
using System.Data.SQLite;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Bolas_V2
{
    internal class Operaciones
    {
        private List<Object> lst = new List<Object>();
        private SQLiteConnection con;
        private SQLiteCommand commando;
        private SQLiteDataReader lector;

        public Operaciones(SQLiteConnection con)
        {
           this.con = con;
        }
        public void Consulta()
        {
            commando = this.con.CreateCommand();
            commando.CommandText = "SELECT * FROM bolas";
            lector = commando.ExecuteReader();
            if (lector.HasRows)
            {
                while (lector.Read())
                {
                    Console.WriteLine(lector.GetInt32(0) + " " + lector.GetInt32(1) + " " + lector.GetInt32(2));
                }
            }
        }
    }
}

Ahora lo que quiero conseguir es crear un método que me devuelva el nombre de las columnas de la tabla, no busco que me den la solución hecha, solo quiero orientacion de como debería  hacerlo, y la consulta query para obtener dichos nombre.

Muchas gracias de antemano.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5541
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Como obtener el nombre de las columnas de SQLite desde el código
« Reply #1 on: Junio 05, 2022, 01:53:02 pm »
Hola

Mira a ver si te sirve esto sqlite metadata

Comenta dos formas, una cuando ya tienes hecha la consulta para saber los nombres de las columnas y la segunda, que parece muy fácil, sólo es consultar una tabla especial de sql lite pasando el nombre de la tabla de interés para que te de los nombres de las columnas.

Se bueno.

Juanillo

  • Newbie
  • *
  • Posts: 13
  • Karma: 0
    • View Profile
Re: Como obtener el nombre de las columnas de SQLite desde el código
« Reply #2 on: Junio 06, 2022, 12:16:36 am »
Buena a todos gente.
he estado mirando los links donde explica los metadatos de las tablas, pero soy muy nuevo en programación aun me entero poco, pero lo he solucionado de esta manera y me da el resultado esperado, no se si aun dándome el resultado que quiero estoy haciendo lo correcto,
ya que "SELECT * FROM tabla" entiendo que me esta cargando toda la tabla y no solo los nombres de las columnas.

Code: [Select]
public List<String> Dime_Columnas(string tabla)
        {
            List<string> lst = new List<string>();
            commando = this.con.CreateCommand();
            commando.CommandText = "SELECT * FROM "+tabla;
            lector = commando.ExecuteReader();
            for (int i = 0; i < lector.FieldCount; i++)
            {
                lst.Add(lector.GetName(i).ToString());
            }
            return lst;
        }

Agradezco toda aclaración y explicación posible

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5541
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Como obtener el nombre de las columnas de SQLite desde el código
« Reply #3 on: Junio 06, 2022, 09:22:00 am »
Hola

Si, está cargando todos los datos y realmente estás analizando los "metadatos" del resultado de la consulta.

Si no quieres traer los datos, la forma sería la segunda opción del link que te pasé.

Un saludo.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5541
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Como obtener el nombre de las columnas de SQLite desde el código
« Reply #4 on: Junio 07, 2022, 02:11:38 pm »
Buenas

Sobre la respuesta anterior, solo puntualizar una cosa.

En el SELECT de los datos, realmente no te estas trayendo todos los datos. La cantidad de resultados puede ser ingente y en general las consultas a BD no se traen de golpe todos los datos a tu aplicación. Se van trayendo poco a poco según los vas leyendo.

En cualquier caso lo dicho, si lo que te interesa son los metadatos y no los datos en sí, es más elegante la segunda opción.

Se bueno.