Hola muchachada!
Primer post, acá, con ganas de aportar cosas de programación :3
Hoy les muestro cómo conectar un simple programa hecho en C# con Visual Studio 2012 con una base creada en SQL Server 2008. CON IMAGENES! :B
A estas alturas si estás leyendo esto es porque o sabés algo de programación, o estás moderando, ambos son bienvenidos
Pero el target de gente principal es alguien que tenga conocimientos mínimos de software developing, y mejor si es en C#, pero voy a tratar de explicar todo lo mejor posible. Para los que nunca vieron nada de programación, les recomiendo pasar por otros post de Taringa! que seguro debe haber, más adelante voy a hacer algunos aportes para los que saben poco o nada 
Bueno, empecemos.
Primero:
- Visual Studio 2012
-SQL Server 2008 R2 (después linkeo, tengo que subir mi sql porque a varios que los bajan de internet no les andaba, así que después subo el mío que anda de 10 :3)
Instalen todo por defecto los que no lo tenían :3
Primero arrancamos con el programa, codeando y diseñando todo. Después nos vamos a pasar a Sql y les voy a mostrar un poco como va la mano, vamos a tener una base de datos Agenda con una sola tabla llamada Persona.
(PIDAN POR MP EL PROYECTO)
El programa consistirá en mostrar todas las personas de la Agenda en una tablita que en VS se llama DataGridView (Vista de cuadrícula de datos o como se quiera traducir), y podremos ir agregando más personas además de editar y borrar desde la tablita. Primero arrancamos con C# porque lo digo yo (? es lo más complicado, así que si sobreviven ya pasamos a SQL y va a ser todo más fácil. :33
Agregar:
Abrimos el Visual Studio '12
Archivo >> Nuevo >> Proyecto >> Aplicación de Windows Forms
Aceptar
Se nos genera el proyecto con la solución y quedaría así:
Perfecto, ahí tenemos el form el cual podemos rediseñar agregando/modificando/quitando componentes desde el cuadro de herramientas, que es la pestaña que se encuentra a la <------
Por ahora, vamos a agregar un DataGridView al Form (ventana), agrandamos el form y nos dirigimos al cuadro de herramientas y arrastramos esos 2 componentes a la ventana.
Al agregarlo nos saldrá una ventanita, dejaremos tododestildado (Quedará como ReadOnly):
Ahora lo que vamos a hacer es cambiar el nombre de dataGridView a DGV, para que quede más simple. Teniendo seleccionada la dataGridView vamos a la derecha, a propiedades >> diseño >> (Name) y lo nombramos DGV
Joya, ahora... qué hacemos? A codear.
Vamos abajo a la derecha a la pestaña que dice "Explorador de soluciones" o simplemente tocamos F7 para el código (Shift + F7 para el diseño).
Nos encontramos con lo siguiente:
Ahora como vamos a usar cosas que forman parte de una librería que no estamos usando, la agregamos arriba de todo.
using System.Data.SqlClient;
Ahora fuera de "public Form1" creamos las siguientes variables privadas:
private SqlConnection sqlCon;
private SqlCommand sqlCmd;
private String strCmd;
private DataTable dt;
private SqlDataAdapter sqlDA;
ese "public Form1" es el constructor de la clase, es lo primero que se ejecuta al iniciar el programa (De lo que nos interesa)
Así que agarramos y dentro de ese bloque inicializamos la conexión de la base. Cómo? De la siguiente manera:
String instancia = "SQLExpress";
String bd = "Agenda";
try
{
sqlCon = new SqlConnection("Server=" + System.Environment.MachineName + "" + instancia + ";Database= " + bd + ";Trusted_Connection=True" ) ;
sqlCon.Open();
}
catch (SqlException)
{
MessageBox.Show("No se pudo establecer la conexión con la Base de datos." ) ;
Application.Exit();
}
bloque try-catch
en el try:
se se pasa un String por parámetro al instanciar el sqlCon como un nuevo SqlConnection
Internamente al ejecutar el programa quedaría, en mi caso, así:
Server=Ludebe-PCSQLExpress;Database=Agenda;Trusted_Connection= True
y al final del try abre la conexión para ya dejarla abierta durante todo le uso del programa.
A mí me enseñaron que lo ideal es abrir y cerrar al momento de enviar una consulta a la base de datos, pero en SQL Server, según leí, existe algo que se llama connection pooling, que es una función de Sql que se encarga de administrar las conexiones. Al ser un programita simple, lo dejamos así.
El catch se ejecuta si se genera una excepción en el try, en el cual nos mostraría un mensaje y al aceptar se cerraría el programa.
Quedaría así:
El método InitializateComponent() lo que hace es cargar todos los componentes que cargamos visualmente en el Form en la clase Designer.cs, pero no nos vamos a meter en eso porque no hace falta
Perfecto, ya inicializamos la conexión. Pero... ahora?
Lo que vamos a hacer es ahora conseguir o traer todos los registros de la tabla Persona para mostrarlos en una tabla. Cómo? De la siguiente manera con las variables que declaramos antes:
Vamos a crear un método privado que se va a llamar actualizarTabla() y que se va a encargar de llenar la tabla con los valores de la BDD.
private void actualizarTabla()
{
dt = new DataTable();
strCmd = "Select * from Personas";
sqlCmd = new SqlCommand(strCmd,sqlCon);
sqlDA = new SqlDataAdapter(sqlCmd);
sqlDA.Fill(dt);
DGV.DataSource = dt;
}
Se vacía la datatable, se crea la consulta (strCmd), se crea el comando pasándole el string y la conexión ya abierta, el dataAdapter lo que hace es lo que parece, es un adaptador entre una datatable y SQL. Como ven, al crearlo se le pasa el comando, por lo que al llamar su método Fill() está llenando la dt con los registros traídos desde SQL.
al final, se iguala la DGV al dt. Simple, no? La lógica es fácil, capaz que cuesta aprenderse la sintáxis
En VS quedaría así:
Bueno, ahora invocamos el método en el constructor de la clase, justo debajo de donde instanciamos la conexíon de la base así al cargar el Form ya llena la tabla :3 like this:
Listop, ahora si ejecutamos va a explotar todo a la mi*rda porque no tenemos la base creada, obviamente.
Vamos a proceder a añadir unos textBoxes locos para poder agregar nuevas personas. Así que Shift + F7 o explorador de soluciones >> Form1 doble click
Vamos a agregar un textBox para el nombre, otro para el apellido, uno para el DNI, otro para el teléfono y uno final para la dirección, así bien simple.
Cuadro de herramientas >> TextBox
Arrastran 5 al form como hicieron con el DGV o arrastran uno y copypastean el control:
ahora para reconocerlos arrastramos 5 Labels a la izquierda de cada TextBox:
Va quedando... ahora a cambiar las propiedades de los 10 controles que acabamos de agregar.
Tenemos que cambiar de los labeles el texto que se muestra y de los textBoxs el nombre en el diseño.
Vamos con los labeles...
Seleccionamos uno >> propiedades >> apariencia >> text >> "Nombre"
así:
Y después con los demás, quedaría así:
Perfecto, ahora lo mismo con los textBoxes nada más que en vez de ir a apariencia, vamos a diseño y cambiamos el (name) a txtBoxNombre, txtBoxApellido, y así con los 5, así podremos usarlos más fácil después al momento de getear o conseguir su Text (lo que está escrito).
(No recomiendo poner acentos en variables, como se presenta en el caso del Teléfono y de la Dirección).
Luego de esto, agregamos un botón debajo de estos controles:
Jueguen con las propiedades, les pueden cambiar la apariencia a casi todo, por ejemplo, a mí en estos tipos de programa me gustan los botones así:
Para ponerlo así vayan a propiedades teniendo el botón seleccionado, apariencia, FlatStyle, y elijan Flat :3
Bueno, ahora cambienle el nombre en diseño a "btnAgregar" y el texto en apariencia a Agregar, quedaría así:
Por último agregen un botón igual pero que se llame en apariencia Actualizar y en diseño bntActualizar
Ahora, si hacen doble click en el btnAgregar se va a generar en el código un evento click, que luego al ejecutar el programa y presionar el botón, se ejecutará lo que esté dentrode ese bloque que se auto-generó. También pueden jugar con este tipo de cosas si van al rayito teniendo el control seleccionado (sea un botón, un textBox, un label, lo que sea, cualquiera !
)
Ese "rayito" es una forma de declarar eventos muy fácilmente, en otro post hablaré de esto sino nos vamos a la mier e.e
Buem, hagan doble-click en btnagregar para generar el evento y los llevará al código:
Este evento lo que hará es ejecutar una consulta a SQL para que se guarde una nueva persona al tener todos los campos llenos.
Una buena práctica y acá empiezan temas de ética y seguridad mínima, es hacer un método que compruebe que estén los campos llenos, así no manda un DNI vacío, o un apellido, o lo que sea que fuese que esté sin completar :3
Entoonces, debajo de actualizarTabla() creamos un método privado que devuelva un Boolean y que se llame camposCompletos()
private Boolean camposCompletos()
{
if (textBoxNombre.Text.Equals( "" ) || textBoxApellido.Text.Equals( "" ) ||
textBoxDNI.Text.Equals( "" ) || textBoxTelefono.Text.Equals( "" ) ||
textBoxDireccion.Text.Equals( "" ))
{
return false;
}
else
{
return true;
}}
Lo que hace este método es comprobar que ningún textBox tenga un Text "", osea, esté vacío.
Es similar a poner String.Empty en los parámetros del Equals.
Si se cumple el if es porque hay un campo vacío y devuelve un false.
camposCompletos() == false
sino, devuelve un true
camposCompletos() == true
Quedaría así:
Hermoso. Ahora... invocamos el método que acabamos de crear en un if dentro del evento del botón Agregar
if (camposCompletos()) lo que hace es ver si camposCompletos devuelve un true o un false, ya que el método devuelve un Boolean.
Si devuelve un true va a llamar a un método privado que devuelve un Boolean guardar() que vamos a crear a continuación, sino, muestra un mensaje por pantalla avisando que el lince no llenó los campos.
debajo de camposCompletos() creamos un private void guardar()
private Boolean guardar()
{
try
{
strCmd = "insert into Personas (Nombre,Apellido,DNI,Telefono,Direccion)" +
"values ('" + textBoxNombre.Text + "','" + textBoxApellido.Text + "','" + textBoxDNI.Text
+ "','" + textBoxTelefono.Text + "','" + textBoxDireccion.Text + "')";
sqlCmd = new SqlCommand(strCmd,sqlCon);
sqlCmd.ExecuteNonQuery();
MessageBox.Show( "Hecho!" , "Aviso" ) ;
return true;
}
catch(SqlException)
{
MessageBox.Show("No se ha podido guardar en la base de datos","Advertencia" ) ;
return false;
}
}
Queda así:
(Escriban bien Direccion no sean boludos, por dios (? Jajajaja)
Ahora solo queda llamar al método guardar() en el if del evento click del botón
like THIS:
Un espectáculo. Ahora generen el evento del btnActualizar haciendo doble-click sobre él y dentro del bloque llamen al actualizarTabla();
:3 :
Bien maquinola,creo que es hora de pasarnos a Sql.
Así que sin cerrar VS abren el SQL Managment Studio, loguéan y tocan donde dice new Query:
y escriben lo siguiente:
create database Agenda
go
use Agenda
go
create table Personas
(
Nombre varchar(30) not null,
Apellido varchar(30) not null,
DNI varchar(12) not null,
Telefono varchar(20) not null,
Direccion varchar(40) not null
)
Lo que hace es crear la base Agenda, usarla y declarar la tabla con sus respectivos campos.
ya con esto podríamos ejecutar el programa perfectamente y veremos que funciona.
les dejo la imagen del query, igual después se las incluyo en el .rar junto al proyecto y al .exe, pidanlo por MP
Perfecto rufián, a ejecutar el programa!
Vuelvan al Visual Studio y Dááleh al plaàày (Compliar y ejecutar [► Iniciar])
Se muestra así:
Si les llega a mostrar la ventana es porque ya conecta bien con la base de datos. De lo contrario comprueben bien el nombre de la instancia y de la base de datos en el constructor, como muestro al principio del post, es eso seguro :3
Ahora si tocamos agregar así como viene sin llenar nada, nos tira un errorcito e.é:
10 punto'
Ahora llenamos normalmente y tocamos actualizar:
GG WP !
Commend Ludebe.(?
Fíjense que quedó un poco angostito el DGV, ensanchenlo un toque
Ya tenemos la funcionalidad de agregar un registro a la base, ahora vamos con la editar!
Editar:
Primero cambiemos el nombre del diseño de btnAgregar por btnGuardar y su apariencia a Guardar, ya que lo usaremos tanto para un nuevo registro como para terminar de editar, ya van a ver.
(Aumenté el ancho del DGV ya que estaba)
Si se fijan y hacen doble-click en el botón, el método se seguirá llamando btnAgregar_Click, eso no va a generar conflictos, pero si son caprichosos como yo e.e lo pueden cambiar de la siguiente forma:
Primero, simplemente donde dice btnAgregar lo cambian por btnGuardar:
Luego, vuelvan al diseño tocando shift + F7, y les dirá que hay un error blablabla, esto es porque en la clase Designer.cs quedó el evento click del botón referenciando a btnAgregar, mientras que ahora es btnGuardar, lo que hacen es ir a donde dice "instancias de este error", el primre renglón celeste:
y les aparecerá esto:
Ahora verán que les marca una línea en rojo. Lo siguiente es muy fácil, reemplazar btnAgregar por btnGuardar como hicieron antes, así cambian la referencia del botón.
Fácil, ya no tira error. Pueden cerrar la clase Designer que no la vamos a usar, y volver al diseño, ahora va a funcionar todo perfecto.
Ahora para poder editar lo que vamos a hacer es configurar el DGV para que se seleccione el registro o fila completa para poder acceder al index o número de fila seleccionada y poder acceder a los datos de la misma.
Primero, agregamos 2 personas más para tener un poquito más de variedad, si es que todavía no lo hicieron:
Ahora configuramos el DGV.
Vamos al constructor del Fom1 (donde inicializamos la conexión) y ahí abajo de todo ponemos lo siguiente:
DGV.SelectionMode = DataGridViewSelectionMode.FullRowSelect ;
DGV.MultiSelect = false ;
Lo que se hace es que se selecicone por fila completa y sólo 1, quedaría así:
ahora si ejecutamos y vamos al DGV a seleccionar algo, comprobaremos que funca e.e
Ahora lo que hacemos es crear un botón btnEditar con texto Editar:
Vamos al código y como variables arriba de todo declaramos un private Boolean editando, y en el constructor lo ponemos como editando = false
ahora doble-click en el botón Editar para generar el método, y dentro ponemos lo siguiente:
if (DGV.SelectedRows.Count > 0)
{
editando = true;
textBoxNombre.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["Nombre"].Value.ToString() ;
textBoxApellido.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["Apellido"].Value.ToString() ;
textBoxDNI.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["DNI"].Value.ToString() ;
textBoxTelefono.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["Telefono"].Value.ToString() ;
textBoxDireccion.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["Direccion"].Value.ToString() ;
}
Queda así:
lo que se hace es llenar los campos con los valores del registro seleccionado de la tabla.
DGV.SelectedRows[0].Index trae un int index, osea, el número del registro o fila seleccionado del DGV.
textBoxNombre.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["Nombre"].Value.ToString() ;
Acá se setea o asigna al texto del textBoxNombre el valor que esté en la fila INDEX y en la celda NOMBRE del DGV.
Al llenarse los textBox con los valores, los editamos a gusto y al presionar guardar editando va a ser true, por lo que en vez de insert into va a ser un update where.
Vamos al método guardar y implementamos la edición de la siguiente manera.
Dentro del try ponemos un if(editando) y dentro del bloque del if, ponemos lo que pasaría si se está editando:
strCmd = "Update Personas set Nombre = '" + textBoxNombre.Text + "', Apellido = '" + textBoxApellido.Text + "'," +
"DNI = '" + textBoxDNI.Text + "', Telefono = '" + textBoxTelefono.Text + "', Direccion = '" + textBoxDireccion.Text + "' " +
"where DNI = '" + DGV.Rows[DGV.SelectedRows[0].Index].Cells["DNI"].Value.ToString()+ "'";
sqlCmd = new SqlCommand(strCmd, sqlCon) ;
sqlCmd.ExecuteNonQuery() ;
MessageBox.Show("Hecho!", "Aviso" ) ;
editando = false;
return true ;
y después, en un else, lo que ya estaba puesto, el guardar o agregar normal.
Queda así:
Comprueben que quede igual en la foto, es difícil poner código en el post por los emoticones y el formato, se petea todo (?
Bueno... otra aclaración: El DNI acá funcionaría como Primary Key, los que saben van a entender a qué me refiero, después voy a hacer un aporte en la comu explicando esto :3
Si hay 2 personas con mismo DNI, va a modificar los 2, lo cual no estaría bueno, así que cuando crean personas, que tengan diferente DNI :3
Probemos:
ejecutamos:
Seleccionamos al Lince y presionamos Editar:
Cambiamos todos los campos para ver si funciona correctamente, guardar y actualizamos:
Y eso es todo para la edición!
Borrar:
Agregamos un btnBorrar debajo del btnEditar:
doble-click en el botón nuevo para generar el evento y adentro ponemos esto:
if(MessageBox.Show( "¿Desea realmente borrar este registro?" , "Confirmación" , MessageBoxButtons.YesNo) == DialogResult.Yes)
{
borrar() ;
}
Así:
obviamente borrar() nos va a tirar error porque no existe, así que vamos a crearlo.
debajo del método guardar() creamos un private Boolean borrar() con lo siguiente:
try
{
strCmd = "delete from Personas where Nombre = '" + DGV.Rows[DGV.SelectedRows[0].Index].Cells["Nombre"].Value.ToString() + "' " +
" and DNI = '" + DGV.Rows[DGV.SelectedRows[0].Index].Cells["DNI"].Value.ToString() + "'";
sqlCmd = new SqlCommand(strCmd, sqlCon);
sqlCmd.ExecuteNonQuery();
MessageBox.Show(DGV.Rows[DGV.SelectedRows[0].Index].Cells["Nombre"].Value.ToString() + " Borrado correctamente" , "Aviso" ) ;
return true;
}
catch (SqlException)
{
MessageBox.Show("No se ha podido guardar en la base de datos" , "Advertencia" ) ;
return false ;
}
Quedaría así:
LISTO LINCE! Si, era sólo eso, una boludes
Lo que hace es borrar en Personas donde el DNI sea igual al del registro o fila seleccionado en el DGV.
Ejecutamos:
Seleccionamos el editado de recién y tocamos borrar
Ponemos que No. na mentira, que sí
actualizamos y... VOILÁ:
Ahí tienen, bah.. en realidad ya no lo tienen jajajaj, se borró correctamente. :3
Después obviamente pueden modificar la interfaz decorandola a gusto para que quede más organizada o fachera
Así con esta base (de conocimiento) ya hasta lo pueden hacer ustedes, pueden comprobar que sea un dni válido, pueden agregar más campos, un botón cancelar para cancelar la edición/borrado de registros y que se limpien los textBox, todo lo que quieran. Lo importante y lo que quería mostrar es que tan fácil es conectar una base con mi amado C# <3 Lo he hecho en java y es mucho más manual, Microsoft al poner mucho más $$ nos facilita las cosas. Beautiful.
Listo muchachada, me encantó hacer este post, lo disfruté mucho
Pienso seguir pero ahora van a ser aportes en mi comunidad de desarrollo de software 
Los que quieran aprender/aportar son todos bienvenidos!!
(No sé si este post va en Ciencias y educación o en Hazlo tu mismo, creí más correcta esta categoría)
Nos vemos gente ! Felices Fiestas!!
EDIT 1:
Gracias a ustedes ya pude crear la comunidad !
A los que les interese, pásense. Ya estoy subiendo algunos aportes que les puede servir! Voy a empezar también a hacer tutoriales para los más iniciados!
MUCHAS GRACIAS GENTE!
Este es un aporte hecho por mí en base a mis conocimientos y experiencias de desarrollo en C#.
Si quieren ver más sobre este contenido pueden pasarse por mi comunidad:
Primer post, acá, con ganas de aportar cosas de programación :3
Hoy les muestro cómo conectar un simple programa hecho en C# con Visual Studio 2012 con una base creada en SQL Server 2008. CON IMAGENES! :B
A estas alturas si estás leyendo esto es porque o sabés algo de programación, o estás moderando, ambos son bienvenidos

Pero el target de gente principal es alguien que tenga conocimientos mínimos de software developing, y mejor si es en C#, pero voy a tratar de explicar todo lo mejor posible. Para los que nunca vieron nada de programación, les recomiendo pasar por otros post de Taringa! que seguro debe haber, más adelante voy a hacer algunos aportes para los que saben poco o nada 
Bueno, empecemos.
Primero:
- Visual Studio 2012
-SQL Server 2008 R2 (después linkeo, tengo que subir mi sql porque a varios que los bajan de internet no les andaba, así que después subo el mío que anda de 10 :3)
Instalen todo por defecto los que no lo tenían :3
Primero arrancamos con el programa, codeando y diseñando todo. Después nos vamos a pasar a Sql y les voy a mostrar un poco como va la mano, vamos a tener una base de datos Agenda con una sola tabla llamada Persona.
(PIDAN POR MP EL PROYECTO)
El programa consistirá en mostrar todas las personas de la Agenda en una tablita que en VS se llama DataGridView (Vista de cuadrícula de datos o como se quiera traducir), y podremos ir agregando más personas además de editar y borrar desde la tablita. Primero arrancamos con C# porque lo digo yo (? es lo más complicado, así que si sobreviven ya pasamos a SQL y va a ser todo más fácil. :33
Agregar:
Abrimos el Visual Studio '12
Archivo >> Nuevo >> Proyecto >> Aplicación de Windows Forms
Aceptar
Se nos genera el proyecto con la solución y quedaría así:
Perfecto, ahí tenemos el form el cual podemos rediseñar agregando/modificando/quitando componentes desde el cuadro de herramientas, que es la pestaña que se encuentra a la <------
Por ahora, vamos a agregar un DataGridView al Form (ventana), agrandamos el form y nos dirigimos al cuadro de herramientas y arrastramos esos 2 componentes a la ventana.
Al agregarlo nos saldrá una ventanita, dejaremos tododestildado (Quedará como ReadOnly):
Ahora lo que vamos a hacer es cambiar el nombre de dataGridView a DGV, para que quede más simple. Teniendo seleccionada la dataGridView vamos a la derecha, a propiedades >> diseño >> (Name) y lo nombramos DGV
Joya, ahora... qué hacemos? A codear.
Vamos abajo a la derecha a la pestaña que dice "Explorador de soluciones" o simplemente tocamos F7 para el código (Shift + F7 para el diseño).
Nos encontramos con lo siguiente:
Ahora como vamos a usar cosas que forman parte de una librería que no estamos usando, la agregamos arriba de todo.
using System.Data.SqlClient;
Ahora fuera de "public Form1" creamos las siguientes variables privadas:
private SqlConnection sqlCon;
private SqlCommand sqlCmd;
private String strCmd;
private DataTable dt;
private SqlDataAdapter sqlDA;
ese "public Form1" es el constructor de la clase, es lo primero que se ejecuta al iniciar el programa (De lo que nos interesa)
Así que agarramos y dentro de ese bloque inicializamos la conexión de la base. Cómo? De la siguiente manera:
String instancia = "SQLExpress";
String bd = "Agenda";
try
{
sqlCon = new SqlConnection("Server=" + System.Environment.MachineName + "" + instancia + ";Database= " + bd + ";Trusted_Connection=True" ) ;
sqlCon.Open();
}
catch (SqlException)
{
MessageBox.Show("No se pudo establecer la conexión con la Base de datos." ) ;
Application.Exit();
}
bloque try-catch
en el try:
se se pasa un String por parámetro al instanciar el sqlCon como un nuevo SqlConnection
Internamente al ejecutar el programa quedaría, en mi caso, así:
Server=Ludebe-PCSQLExpress;Database=Agenda;Trusted_Connection= True
y al final del try abre la conexión para ya dejarla abierta durante todo le uso del programa.
A mí me enseñaron que lo ideal es abrir y cerrar al momento de enviar una consulta a la base de datos, pero en SQL Server, según leí, existe algo que se llama connection pooling, que es una función de Sql que se encarga de administrar las conexiones. Al ser un programita simple, lo dejamos así.
El catch se ejecuta si se genera una excepción en el try, en el cual nos mostraría un mensaje y al aceptar se cerraría el programa.
Quedaría así:
El método InitializateComponent() lo que hace es cargar todos los componentes que cargamos visualmente en el Form en la clase Designer.cs, pero no nos vamos a meter en eso porque no hace falta

Perfecto, ya inicializamos la conexión. Pero... ahora?
Lo que vamos a hacer es ahora conseguir o traer todos los registros de la tabla Persona para mostrarlos en una tabla. Cómo? De la siguiente manera con las variables que declaramos antes:
Vamos a crear un método privado que se va a llamar actualizarTabla() y que se va a encargar de llenar la tabla con los valores de la BDD.
private void actualizarTabla()
{
dt = new DataTable();
strCmd = "Select * from Personas";
sqlCmd = new SqlCommand(strCmd,sqlCon);
sqlDA = new SqlDataAdapter(sqlCmd);
sqlDA.Fill(dt);
DGV.DataSource = dt;
}
Se vacía la datatable, se crea la consulta (strCmd), se crea el comando pasándole el string y la conexión ya abierta, el dataAdapter lo que hace es lo que parece, es un adaptador entre una datatable y SQL. Como ven, al crearlo se le pasa el comando, por lo que al llamar su método Fill() está llenando la dt con los registros traídos desde SQL.
al final, se iguala la DGV al dt. Simple, no? La lógica es fácil, capaz que cuesta aprenderse la sintáxis

En VS quedaría así:
Bueno, ahora invocamos el método en el constructor de la clase, justo debajo de donde instanciamos la conexíon de la base así al cargar el Form ya llena la tabla :3 like this:
Listop, ahora si ejecutamos va a explotar todo a la mi*rda porque no tenemos la base creada, obviamente.
Vamos a proceder a añadir unos textBoxes locos para poder agregar nuevas personas. Así que Shift + F7 o explorador de soluciones >> Form1 doble click
Vamos a agregar un textBox para el nombre, otro para el apellido, uno para el DNI, otro para el teléfono y uno final para la dirección, así bien simple.
Cuadro de herramientas >> TextBox
Arrastran 5 al form como hicieron con el DGV o arrastran uno y copypastean el control:
ahora para reconocerlos arrastramos 5 Labels a la izquierda de cada TextBox:
Va quedando... ahora a cambiar las propiedades de los 10 controles que acabamos de agregar.
Tenemos que cambiar de los labeles el texto que se muestra y de los textBoxs el nombre en el diseño.
Vamos con los labeles...
Seleccionamos uno >> propiedades >> apariencia >> text >> "Nombre"
así:
Y después con los demás, quedaría así:
Perfecto, ahora lo mismo con los textBoxes nada más que en vez de ir a apariencia, vamos a diseño y cambiamos el (name) a txtBoxNombre, txtBoxApellido, y así con los 5, así podremos usarlos más fácil después al momento de getear o conseguir su Text (lo que está escrito).
(No recomiendo poner acentos en variables, como se presenta en el caso del Teléfono y de la Dirección).
Luego de esto, agregamos un botón debajo de estos controles:
Jueguen con las propiedades, les pueden cambiar la apariencia a casi todo, por ejemplo, a mí en estos tipos de programa me gustan los botones así:
Para ponerlo así vayan a propiedades teniendo el botón seleccionado, apariencia, FlatStyle, y elijan Flat :3
Bueno, ahora cambienle el nombre en diseño a "btnAgregar" y el texto en apariencia a Agregar, quedaría así:
Por último agregen un botón igual pero que se llame en apariencia Actualizar y en diseño bntActualizar
Ahora, si hacen doble click en el btnAgregar se va a generar en el código un evento click, que luego al ejecutar el programa y presionar el botón, se ejecutará lo que esté dentrode ese bloque que se auto-generó. También pueden jugar con este tipo de cosas si van al rayito teniendo el control seleccionado (sea un botón, un textBox, un label, lo que sea, cualquiera !

)
Ese "rayito" es una forma de declarar eventos muy fácilmente, en otro post hablaré de esto sino nos vamos a la mier e.e
Buem, hagan doble-click en btnagregar para generar el evento y los llevará al código:
Este evento lo que hará es ejecutar una consulta a SQL para que se guarde una nueva persona al tener todos los campos llenos.
Una buena práctica y acá empiezan temas de ética y seguridad mínima, es hacer un método que compruebe que estén los campos llenos, así no manda un DNI vacío, o un apellido, o lo que sea que fuese que esté sin completar :3
Entoonces, debajo de actualizarTabla() creamos un método privado que devuelva un Boolean y que se llame camposCompletos()
private Boolean camposCompletos()
{
if (textBoxNombre.Text.Equals( "" ) || textBoxApellido.Text.Equals( "" ) ||
textBoxDNI.Text.Equals( "" ) || textBoxTelefono.Text.Equals( "" ) ||
textBoxDireccion.Text.Equals( "" ))
{
return false;
}
else
{
return true;
}}
Lo que hace este método es comprobar que ningún textBox tenga un Text "", osea, esté vacío.
Es similar a poner String.Empty en los parámetros del Equals.
Si se cumple el if es porque hay un campo vacío y devuelve un false.
camposCompletos() == false
sino, devuelve un true
camposCompletos() == true
Quedaría así:
Hermoso. Ahora... invocamos el método que acabamos de crear en un if dentro del evento del botón Agregar
if (camposCompletos()) lo que hace es ver si camposCompletos devuelve un true o un false, ya que el método devuelve un Boolean.
Si devuelve un true va a llamar a un método privado que devuelve un Boolean guardar() que vamos a crear a continuación, sino, muestra un mensaje por pantalla avisando que el lince no llenó los campos.
debajo de camposCompletos() creamos un private void guardar()
private Boolean guardar()
{
try
{
strCmd = "insert into Personas (Nombre,Apellido,DNI,Telefono,Direccion)" +
"values ('" + textBoxNombre.Text + "','" + textBoxApellido.Text + "','" + textBoxDNI.Text
+ "','" + textBoxTelefono.Text + "','" + textBoxDireccion.Text + "')";
sqlCmd = new SqlCommand(strCmd,sqlCon);
sqlCmd.ExecuteNonQuery();
MessageBox.Show( "Hecho!" , "Aviso" ) ;
return true;
}
catch(SqlException)
{
MessageBox.Show("No se ha podido guardar en la base de datos","Advertencia" ) ;
return false;
}
}
Queda así:
(Escriban bien Direccion no sean boludos, por dios (? Jajajaja)
Ahora solo queda llamar al método guardar() en el if del evento click del botón
like THIS:
Un espectáculo. Ahora generen el evento del btnActualizar haciendo doble-click sobre él y dentro del bloque llamen al actualizarTabla();
:3 :
Bien maquinola,creo que es hora de pasarnos a Sql.
Así que sin cerrar VS abren el SQL Managment Studio, loguéan y tocan donde dice new Query:
y escriben lo siguiente:
create database Agenda
go
use Agenda
go
create table Personas
(
Nombre varchar(30) not null,
Apellido varchar(30) not null,
DNI varchar(12) not null,
Telefono varchar(20) not null,
Direccion varchar(40) not null
)
Lo que hace es crear la base Agenda, usarla y declarar la tabla con sus respectivos campos.
ya con esto podríamos ejecutar el programa perfectamente y veremos que funciona.
les dejo la imagen del query, igual después se las incluyo en el .rar junto al proyecto y al .exe, pidanlo por MP
Perfecto rufián, a ejecutar el programa!
Vuelvan al Visual Studio y Dááleh al plaàày (Compliar y ejecutar [► Iniciar])
Se muestra así:
Si les llega a mostrar la ventana es porque ya conecta bien con la base de datos. De lo contrario comprueben bien el nombre de la instancia y de la base de datos en el constructor, como muestro al principio del post, es eso seguro :3
Ahora si tocamos agregar así como viene sin llenar nada, nos tira un errorcito e.é:
10 punto'
Ahora llenamos normalmente y tocamos actualizar:
GG WP !
Commend Ludebe.(?
Fíjense que quedó un poco angostito el DGV, ensanchenlo un toque

Ya tenemos la funcionalidad de agregar un registro a la base, ahora vamos con la editar!
Editar:
Primero cambiemos el nombre del diseño de btnAgregar por btnGuardar y su apariencia a Guardar, ya que lo usaremos tanto para un nuevo registro como para terminar de editar, ya van a ver.
(Aumenté el ancho del DGV ya que estaba)
Si se fijan y hacen doble-click en el botón, el método se seguirá llamando btnAgregar_Click, eso no va a generar conflictos, pero si son caprichosos como yo e.e lo pueden cambiar de la siguiente forma:
Primero, simplemente donde dice btnAgregar lo cambian por btnGuardar:
Luego, vuelvan al diseño tocando shift + F7, y les dirá que hay un error blablabla, esto es porque en la clase Designer.cs quedó el evento click del botón referenciando a btnAgregar, mientras que ahora es btnGuardar, lo que hacen es ir a donde dice "instancias de este error", el primre renglón celeste:
y les aparecerá esto:
Ahora verán que les marca una línea en rojo. Lo siguiente es muy fácil, reemplazar btnAgregar por btnGuardar como hicieron antes, así cambian la referencia del botón.
Fácil, ya no tira error. Pueden cerrar la clase Designer que no la vamos a usar, y volver al diseño, ahora va a funcionar todo perfecto.
Ahora para poder editar lo que vamos a hacer es configurar el DGV para que se seleccione el registro o fila completa para poder acceder al index o número de fila seleccionada y poder acceder a los datos de la misma.
Primero, agregamos 2 personas más para tener un poquito más de variedad, si es que todavía no lo hicieron:
Ahora configuramos el DGV.
Vamos al constructor del Fom1 (donde inicializamos la conexión) y ahí abajo de todo ponemos lo siguiente:
DGV.SelectionMode = DataGridViewSelectionMode.FullRowSelect ;
DGV.MultiSelect = false ;
Lo que se hace es que se selecicone por fila completa y sólo 1, quedaría así:
ahora si ejecutamos y vamos al DGV a seleccionar algo, comprobaremos que funca e.e
Ahora lo que hacemos es crear un botón btnEditar con texto Editar:
Vamos al código y como variables arriba de todo declaramos un private Boolean editando, y en el constructor lo ponemos como editando = false
ahora doble-click en el botón Editar para generar el método, y dentro ponemos lo siguiente:
if (DGV.SelectedRows.Count > 0)
{
editando = true;
textBoxNombre.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["Nombre"].Value.ToString() ;
textBoxApellido.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["Apellido"].Value.ToString() ;
textBoxDNI.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["DNI"].Value.ToString() ;
textBoxTelefono.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["Telefono"].Value.ToString() ;
textBoxDireccion.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["Direccion"].Value.ToString() ;
}
Queda así:
lo que se hace es llenar los campos con los valores del registro seleccionado de la tabla.
DGV.SelectedRows[0].Index trae un int index, osea, el número del registro o fila seleccionado del DGV.
textBoxNombre.Text = DGV.Rows[DGV.SelectedRows[0].Index].Cells["Nombre"].Value.ToString() ;
Acá se setea o asigna al texto del textBoxNombre el valor que esté en la fila INDEX y en la celda NOMBRE del DGV.
Al llenarse los textBox con los valores, los editamos a gusto y al presionar guardar editando va a ser true, por lo que en vez de insert into va a ser un update where.
Vamos al método guardar y implementamos la edición de la siguiente manera.
Dentro del try ponemos un if(editando) y dentro del bloque del if, ponemos lo que pasaría si se está editando:
strCmd = "Update Personas set Nombre = '" + textBoxNombre.Text + "', Apellido = '" + textBoxApellido.Text + "'," +
"DNI = '" + textBoxDNI.Text + "', Telefono = '" + textBoxTelefono.Text + "', Direccion = '" + textBoxDireccion.Text + "' " +
"where DNI = '" + DGV.Rows[DGV.SelectedRows[0].Index].Cells["DNI"].Value.ToString()+ "'";
sqlCmd = new SqlCommand(strCmd, sqlCon) ;
sqlCmd.ExecuteNonQuery() ;
MessageBox.Show("Hecho!", "Aviso" ) ;
editando = false;
return true ;
y después, en un else, lo que ya estaba puesto, el guardar o agregar normal.
Queda así:
Comprueben que quede igual en la foto, es difícil poner código en el post por los emoticones y el formato, se petea todo (?
Bueno... otra aclaración: El DNI acá funcionaría como Primary Key, los que saben van a entender a qué me refiero, después voy a hacer un aporte en la comu explicando esto :3
Si hay 2 personas con mismo DNI, va a modificar los 2, lo cual no estaría bueno, así que cuando crean personas, que tengan diferente DNI :3
Probemos:
ejecutamos:
Seleccionamos al Lince y presionamos Editar:
Cambiamos todos los campos para ver si funciona correctamente, guardar y actualizamos:
Y eso es todo para la edición!
Borrar:
Agregamos un btnBorrar debajo del btnEditar:
doble-click en el botón nuevo para generar el evento y adentro ponemos esto:
if(MessageBox.Show( "¿Desea realmente borrar este registro?" , "Confirmación" , MessageBoxButtons.YesNo) == DialogResult.Yes)
{
borrar() ;
}
Así:
obviamente borrar() nos va a tirar error porque no existe, así que vamos a crearlo.
debajo del método guardar() creamos un private Boolean borrar() con lo siguiente:
try
{
strCmd = "delete from Personas where Nombre = '" + DGV.Rows[DGV.SelectedRows[0].Index].Cells["Nombre"].Value.ToString() + "' " +
" and DNI = '" + DGV.Rows[DGV.SelectedRows[0].Index].Cells["DNI"].Value.ToString() + "'";
sqlCmd = new SqlCommand(strCmd, sqlCon);
sqlCmd.ExecuteNonQuery();
MessageBox.Show(DGV.Rows[DGV.SelectedRows[0].Index].Cells["Nombre"].Value.ToString() + " Borrado correctamente" , "Aviso" ) ;
return true;
}
catch (SqlException)
{
MessageBox.Show("No se ha podido guardar en la base de datos" , "Advertencia" ) ;
return false ;
}
Quedaría así:
LISTO LINCE! Si, era sólo eso, una boludes

Lo que hace es borrar en Personas donde el DNI sea igual al del registro o fila seleccionado en el DGV.

Ejecutamos:
Seleccionamos el editado de recién y tocamos borrar
Ponemos que No. na mentira, que sí

actualizamos y... VOILÁ:
Ahí tienen, bah.. en realidad ya no lo tienen jajajaj, se borró correctamente. :3
Después obviamente pueden modificar la interfaz decorandola a gusto para que quede más organizada o fachera

Así con esta base (de conocimiento) ya hasta lo pueden hacer ustedes, pueden comprobar que sea un dni válido, pueden agregar más campos, un botón cancelar para cancelar la edición/borrado de registros y que se limpien los textBox, todo lo que quieran. Lo importante y lo que quería mostrar es que tan fácil es conectar una base con mi amado C# <3 Lo he hecho en java y es mucho más manual, Microsoft al poner mucho más $$ nos facilita las cosas. Beautiful.
Listo muchachada, me encantó hacer este post, lo disfruté mucho

Pienso seguir pero ahora van a ser aportes en mi comunidad de desarrollo de software 
Los que quieran aprender/aportar son todos bienvenidos!!
(No sé si este post va en Ciencias y educación o en Hazlo tu mismo, creí más correcta esta categoría)
Nos vemos gente ! Felices Fiestas!!
EDIT 1:
Gracias a ustedes ya pude crear la comunidad !
A los que les interese, pásense. Ya estoy subiendo algunos aportes que les puede servir! Voy a empezar también a hacer tutoriales para los más iniciados!
MUCHAS GRACIAS GENTE!
Este es un aporte hecho por mí en base a mis conocimientos y experiencias de desarrollo en C#.
Si quieren ver más sobre este contenido pueden pasarse por mi comunidad:
Otros aportes: