MySql y C
MySql y C
MySql y C
Bien, una de las grandes funciones que tiene la programación es crear aplicaciones que
almacenen datos en Bases de datos, por esa razón, este apartado está dedicado a explicar
como conectarnos a MySql (Una base de datos Gratuita) desde C# mediante la capa
intermedia de OleDB, la cual es igual para todas las bases de datos del mundo, lo único
que va a cambiar será el conection String que mas adelante explicamos a fondo.
Primero:
Necesitamos instalar la base de datos, para esto, puedes descargar MySql, en su ultima
versión, o mejor dicho la mas resiente o bien descargar el Wamps, que es un
administrador de servicios, que administra el servicio de la Base de Datos MySql, el
servidor Apache y el Php simultáneamente.
Para descargar el Wamps dale clic al siguiente link (Si no funciona Copy/Paste la barra
de navegación) .
También van a necesitar el Driver para conectarse por OledB lo descargan aqui, este
permite conectarnos a la base de datos, existen tres formas posibles (bueno que yo
conozca...)
Segundo:
Una vez instalado, también necesitamos una interface para conectarnos a la base de
datos y crear nuestras bases de datos y tablas para eso, descargamos el Navicat desde
aqui.
Desde el Navicat creamos una base de datos llamada data_colegio y una tabla de
nombre Alumno, con los siguientes campos
Una vez creada esta tabla entramos a C#, creamos un nuevo proyecto de Nombre
cualquiera (en mi caso se llama Garrobito jejeje). y en la forma insertamos los controles
necesarios para capturar los datos (Tres TextBox y tres Label). y un Botón con el
nombre CmdGuardar (o el nombre que se les ocurra) .
try
{
///Si no se ve bien el texto, copia y pega el contenido en el blog de
notas =)
cn = new OleDbConnection("Provider=MySQLProv; Data
Source=data_colegio; User Id=root;Password=");
string query = "insert into alumno(RNE,NOMBRE, APELLIDO) values
('{0}','{1}','{2}')";
query = string.Format(query, id,nombre,apellido);
cn.Open();
OleDbCommand cmd = new OleDbCommand(query, cn);
cmd.ExecuteNonQuery();
cmd.Dispose();
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (cn != null && cn.State != ConnectionState.Closed)
{
cn.Close();
cn.Dispose();
}
}
Primera linea:
Funciones_Globales Control = new Funciones_Globales();
Declaramos una variable llama Control, de tipo Funciones_Globales (que es la clase) y
la instanciamos en memoria.
Segunda Linea:
Abrimos el Try
Tercera Linea:
Llamamos el Método AddAlumno y le enviamos los tres argumentos que esta
esperando, en mi caso mis controles son Un MasketEdit y dos textBox (observen los
prefijos), y si todo está bien mostrará el mensaje de Se almacenaron los registros, en el
caso que la función retorne un error el Catch la captura y muestra el mensaje Error al
Guardar los datos
TEMA 6: LISTBOX
ListBox uno de los nuevos Controls, es un componente DINAMICO (es decir no tiene
tamano definido) que permite procesar visualmente un conjunto de elementos de tipo
string.
La propiedad Rows que se usa al crearlo, es solo para indicarle cuantos renglones
desplegara en pantalla, es decir si se usa rows=5, en listbox se podra capturar todos los
elementos o datos que se quiera pero solo desplegara los ultimos cinco elementos.
Sin embargo existen ciertas propiedades del listbox que permiten conocer cuantos
elementos estan cargados en el listbox.
Este componente, contiene muchas propiedades y metodos que facilitan el trabajo con
datos la mas importante es su propiedad ITEMS, que a su vez tiene:
Items[indice]: get or set el dato en la posicion indicada (ver primera nota abajo).
Notas:
Como ya se indico anteriormente GET y SET son propiedades asociadas a todos los
objetos o controles y sus propiedades de microsoft net, por ejemplo para un textbox, si
en un programa se dice alfa = text5.text; se esta usando get, si se dice text5.text=500; se
esta usando set.
Esto de get-set se puede usar para cualquier propiedad, por ejemplo alfa =
listbox8.background; se esta usando get, pero si se codifica
listbox8.background=amarillol; se esta usando set, como se observa es importante
entender y aplicar este GET-SET en todos los programas.
Capturas: Solo se ocupara un Text, el evento click del button, y el metodo Add del
ListBox.
Pero si se quiere pasar de un ListBox a otro ListBox, entonces ciclo for, count, etc.
ejemplo prog
LISTA1.Items.Add(DATO.Text);
cantidad = LISTA1.Items.Count;
dato = Int32.Parse(LISTA1.Items[r].ToString());
LISTA1.Items[r] = dato.ToString();
};
Recordar que el primer indice en un ListBox es el cero por eso el ciclo va desde el cero
hasta la cantidad de elementos menos uno.
Corrida:
En Visual Basic 6, era habitual que además de añadir una cadena al ListBox
quisiéramos añadir o relacionar también un valor numérico con dicha cadena, en
esa versión de VB usábamos el método ItemData para asociar ese valor numérico,
de forma que cada cadena contenida en el ListBox pudiese tener asociado un valor
numérico (¿cuantas veces lo he repetido?).
Para hacerlo, usábamos un código parecido a este:
With List1
.AddItem "elemento 1"
.ItemData(.NewIndex) = 1
.AddItem "elemento 2"
.ItemData(.NewIndex) = 2
End With
Pero en .NET el control ListBox no tiene un método ItemData (ni una propiedad
NewIndex que indicaba cual era el último índice añadido al ListBox), tampoco se
añaden solamente cadenas, ya que la colección Items lo que acepta son elementos
del tipo Object, por tanto podemos añadir cualquier tipo de datos en esa colección,
no solo cadenas, como ocurría en el control ListBox de VB6.
Class LBItem
Public Contenido As String
Public Valor As Integer
End Class
Es decir, creamos una clase a la que podamos asignar una cadena y un entero.
Vamos a añadirle también un constructor que acepte dos parámetros, uno para
asignar a la cadena y otro para asignar al valor numérico:
Esto es así por lo que te comenté antes: el .NET usa el método ToString para
mostrar el contenido de los elementos de un ListBox, por tanto, deberíamos
redefinir el método ToString de nuestra clase para que muestre el valor adecuado,
en este caso debería mostrarse lo que hayamos asignado a la propiedad (o en este
ejemplo campo público) Contenido.
Para lograrlo, redefinamos el método ToString para que quede de esta forma:
Nota:
Si en lugar de añadir objetos del tipo LBItem hubiésemos añadido,
por ejemplo datos de tipo String, también deberíamos hacer una
conversión de Object a String al recuperar el valor, aunque en el
caso de String es fácil ya que simplemente sería necesario usar el
método ToString de la propiedad SelectedItem, pero si en lugar de
String lo que tenemos son Integer o Double, tendríamos que hacer
la conversión al tipo adecuado.
Nos vemos.
Guillermo
P.S.
Aquí abajo tienes el código completo de VB y de C#.
En ese código se hace la comprobación de que el elemento seleccionado sea del
tipo LBItem, en caso contrario se usa el método ToString del Selecteditem.
Class LBItem
Public Contenido As String
Public Valor As Integer
'
Public Sub New(ByVal c As String, ByVal v As Integer)
Contenido = c
Valor = v
End Sub
'
Public Overrides Function ToString() As String
Return Contenido
End Function
End Class
El código para C#
public class Form1 : System.Windows.Forms.Form
{
//...
//
private void Form1_Load(System.Object sender, System.EventArgs e)
{
ListBox1.Items.Add(new LBItem("Elemento 1", 1));
ListBox1.Items.Add(new LBItem("Elemento 2", 2));
//
// para trabajar con cadenas
ListBox1.Items.Add("Cadena 1");
ListBox1.Items.Add("Cadena 2");
//
// para trabajar con Integer
ListBox1.Items.Add(125);
ListBox1.Items.Add(250);
}
//
private void ListBox1_SelectedIndexChanged(object sender,
System.EventArgs e)
{
// para que valga para cualquier tipo de datos
object o = ListBox1.SelectedItem;
//
if( o is LBItem )
{
LBItem lbi;
lbi = (LBItem)o;
TextBox1.Text = lbi.Contenido;
TextBox2.Text = lbi.Valor.ToString();
}
else
{
TextBox1.Text = ListBox1.SelectedItem.ToString();
TextBox2.Text = "";
}
//
// LBItem lbi;
// lbi = (LBItem)ListBox1.SelectedItem;
// TextBox1.Text = lbi.Contenido;
// TextBox2.Text = lbi.Valor.ToString();
// //
// // si el contenido es de tipo string;
// TextBox1.Text = ListBox1.SelectedItem.ToString();
// //
// // Si el contenido es de tipo int;
// int n = Convert.ToInt32(ListBox1.SelectedItem);
// TextBox1.Text = n.ToString();
// TextBox1.Text = ListBox1.SelectedItem.ToString();
}
}
//
class LBItem
{
public string Contenido;
public int Valor;
//
public LBItem(string c, int v)
{
Contenido = c;
Valor = v;
}
//
public override string ToString()
{
return Contenido;
}
}
Auto completar en Visual Basic y C# 2005
Publicado el 26/Oct/2006
Actualizado el 13/Abr/2007
Autor: Guillermo 'guille' Som
Ejemplo de cómo usar auto completar en los controles ComboBox y TextBox usando Visual Basic 2005 y C# 2005
(2.0). Y como de costumbre, con código tanto para VB como para C#.
Introducción:
Aquí te muestro un par de ejemplos de cómo usar auto completar (mostrar datos de unos elementos muestras escribes)
tanto en un ComboBox como en un TextBox.
Nota:
Si necesitas dar esta funcionalidad a un ListBox (normalmente acompañado de un TextBox), te sugiero que veas el
artículo sobre este mismo tema para las versiones anteriores de .NET.
La primera, como es obvio, es la que se usa con un ComboBox, las otras dos están aplicadas a cajas de texto.
Para activar la opción de auto completar, debes asignar básicamente dos propiedades:
*AutoCompleteMode en la que indicamos cómo queremos que se muestre lo que se vaya encontrando.
*AutoCompleteSource en la que le indicamos de dónde obtendrá los elementos a usar mientras se escribe.
En este ejemplo los valores de los elementos a usar están en un array de tipo String, pero podían estar en cualquier
otro sitio, e incluso los podríamos añadir uno a uno, por medio del método Add de la colección correspondiente, pero
en lugar de añadir uno a uno, los añadimos todos de golpe con el método AddRange.
Crear el ejemplo
Para crear el ejemplo, (en VB o C#), añade un ComboBox y dos TextBox a un formulario, y en el evento Load del
formulario añade el código mostrado más abajo, que como de costumbre está tanto para Visual Basic como para C#.
Recuerda que este código solo es válido para las versiones 2005 o superiores de Visual Studio, si quieres tener esta
funcionalidad en las versiones anteriores de .NET, debes ver este otro artículo.
Nos vemos.
Guillermo
With ComboBox1
.Items.Clear()
.Items.AddRange(a)
.SelectedIndex = 0
End With
With ComboBox1
.AutoCompleteMode = AutoCompleteMode.SuggestAppend
.AutoCompleteSource = AutoCompleteSource.ListItems
End With
End Sub
ComboBox1.Items.Clear();
ComboBox1.Items.AddRange(a);
ComboBox1.SelectedIndex = 0;
ComboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
ComboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
System.Windows.Forms
AutoCompletar TextBox desde base de datos
Hay que tener en cuenta que para utilizar esta opción, debes asignar las siguientes
propiedades:
AutoCompleteMode: que sirve para indicar cómo queremos que se muestren los datos
que encuentra mientras se escribe en el control.
AutoCompleteSource: que sirve para indicarle de dónde se obtendrán los datos que se
usarán mientras se escribe.
En este ejemplo se utiliza AutoCompleteSource asignado a CustomSource debido a
que la fuente de
datos la obtenemos desde una ruta personalizada.
Elementos de importacion:
Imports System.Data.SqlClient
Private Sub
Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AutoCompletar(Me.TextBox1)
End Sub
'Abrimos la coneccion
Coneccion.Open()
Dim Lector As SqlDataReader = Ejecutar.ExecuteReader()
End While
'Cerramos el SqlReader
Lector.Close()
'Cerramos la coneccion
Coneccion.Close()
End Using
'Ajustamos el control TextBox o ComboBox para recibir los datos de la siguiente manera.
With Control
.AutoCompleteMode = AutoCompleteMode.Suggest
.AutoCompleteSource = AutoCompleteSource.CustomSource
.AutoCompleteCustomSource = Coleccion
End With
'Devolvemos los datos recuperados de la base de datos
Return
Coleccion
End Function