Publicado el Dejar un comentario

Cómo llenar un control comboBox de Windows Forms con una colección en c# .Net

Existen muchas formas de llenar un control comboBox en Windows Forms obteniendo los datos de varias fuentes. En este artículo veremos como llenarlo a través de un objeto de tipo colección (List) conteniendo objetos  tuplas (Tuple), obteniendo los datos con el que llenaremos los tuplas de los resultados de una consulta a una base de datos. El código asume que ya se abrió una conexión a la base de datos y se ejecutó una consulta y se están leyendo los datos que arrojó la misma.

 

El código está comentado para su mejor entendimiento.

/* Lista de items para el combobox, los items son representado 
   por tuplas de 2 valores: un entero y otro de tipo cadena */
List<Tuple<Int32, String>> listaItems = new List<Tuple<int, string>>();
                
// Leemos los registros 
while (lector.Read())
{
/* Añade ala lista los items a mostrar en el combobox, creando objetos tupla con valores
   obtenidos de la base de datos*/
  listaItems.Add(Tuple.Create<Int32, String>(lector.GetInt32(0), lector.GetString(1)));
}
// Cierra el lector de datos
lector.Close();

// Asigna items a el combobox
comboBox1.DataSource = listaItems;

/* Asigna la propiedad a desplegar en el combobox
   En un objeto tupla la propiedad que contiene
   el primer elemento es llamada Item1, el segundo Item2
   y asi sucesivamente */
comboBox1.DisplayMember = "Item2";

// Asigna la propiedad como valores de los items del combobox
comboBox1.ValueMember = "Item1";

Espero les sea útil.

¡Hasta la próxima!

 

Publicado el Dejar un comentario

Como conectar a una base de datos Oracle 12c desde una aplicación .Net sin usar archivo tsnames.ora.

Enseguida les comparto el código en ¢# (c sharp) para hacer una conexión a una base de datos Oracle 12c desde una aplicación .Net sin usar archivo tsnames.ora externo que defina la conexión.

Antes de ejecutar el código sobra decir que debes contar con los controladores .Net (drives)  de conexión a Oracle 12c instalados en la máquina de desarrollo y el proyecto debe hacer referencia a la clase Oracle.ManagedDataAccess.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Oracle.ManagedDataAccess.Client;
using Oracle.ManagedDataAccess.Types;


namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Crea cadena de conexion 
            String cadenaConexionOracle = "Data Source=" +
                   "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)" + 
                   "(HOST=localhost)(PORT=1521))" + 
                   "(CONNECT_DATA=(SERVICE_NAME=orcl)));" +
                   "User Id = c##usuariotest; Password = lcdusuariotest;";
            // Crea conexion
            OracleConnection conexionOracle = new OracleConnection(cadenaConexionOracle);
            // Conecta
            conexionOracle.Open();
            // Confirma si la conexion fue abierta
            if (conexionOracle.State == ConnectionState.Open)
            {
                // Se ejecutan las sentencias necesarias...
                // ...
                // Si la conexion esta abierta, la cierra
                conexionOracle.Close();
            }
        }
    }
}

No olvides cambiar los valores de HOST (nombre o ip de la computadora donde está instalada la base de datos), PORT (puerto de conexión), SERVICE_NAME (nombre de la instancia de la base de datos Oracle), User Id (usuario) y Password (contraseña), por los valores correctos de tu base de datos.

¡Hasta la próxima!

Publicado el Dejar un comentario

Error 1921 al hacer copia de archivos con robocopy.

Este error suele arrojarlo cuando copiamos  carpetas de usuarios con el comando robocopy, más precisamente el directorio AppData, ya que contiene uniones (junctions) o enlaces simbólicos (symbolic links) quw windows 10 usa para compatibilidad con sistemas más antiguos y esto ocasiona una copia recursiva o cíclica sin fin creando rutas de directorios demasiado largos hasta que marca este número de error con el mensaje de que no puede encontrar el archivo .

Para evitar este error basta con agregar el switch o parámetro /xj al comando robocopy, por ejemplo así:

robocopy C:\Carpeta_origen D:\Carpeta_destino /MIR /xj

/xj le indica al comando robocopy ignorar enlaces simbólicos.

¡Hasta la próxima!