generated from jackyzha0/quartz
-
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
149 changed files
with
17,599 additions
and
3,182 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1 @@ | ||
# Quartz v4 | ||
|
||
> “[One] who works with the door open gets all kinds of interruptions, but [they] also occasionally gets clues as to what the world is and what might be important.” — Richard Hamming | ||
Quartz is a set of tools that helps you publish your [digital garden](https://jzhao.xyz/posts/networked-thought) and notes as a website for free. | ||
Quartz v4 features a from-the-ground rewrite focusing on end-user extensibility and ease-of-use. | ||
|
||
🔗 Read the documentation and get started: https://quartz.jzhao.xyz/ | ||
|
||
[Join the Discord Community](https://discord.gg/cRFFHYye7t) | ||
|
||
## Sponsors | ||
|
||
<p align="center"> | ||
<a href="https://github.com/sponsors/jackyzha0"> | ||
<img src="https://cdn.jsdelivr.net/gh/jackyzha0/jackyzha0/sponsorkit/sponsors.svg" /> | ||
</a> | ||
</p> | ||
# Compuwiki |
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
## CRUD (Create Read Update Delete) | ||
|
||
- Create = Crear, Agregar, Insertar, Registrar | ||
- Read = Leer, Mostrar | ||
- Update = Actualizar, Cambiar registro, Modificar | ||
- Delete = Borrar, Eliminar | ||
|
||
> El CRUD puede ser tanto: | ||
> DDL (CREATE, ALTER, DROP) | ||
> DML (SELECT, INSERT, UPDATE, DELETE) | ||
En C# usamos DML ya que previamente hemos creado la estructura de la base de datos con DDL. | ||
|
||
- Leer datos con SELECT | ||
```cs | ||
private void btnMostrarPaciente(object sender, RoutedEventArgs e) | ||
{ | ||
eleccion = "Paciente"; | ||
string consulta = "SELECT Id, CONCAT(ID, ' - ' ,Nombre, ' ' ,Apellido1, ' ' ,Apellido2)" | ||
+ " AS infoPaciente FROM Paciente"; | ||
SqlDataAdapter miAdaptadorSql = new SqlDataAdapter(consulta, miConexionSql); | ||
using (miAdaptadorSql) | ||
{ | ||
DataTable pacientesTabla = new DataTable(); | ||
miAdaptadorSql.Fill(pacientesTabla); | ||
lstboxPacienteDoctor.DisplayMemberPath = "infoPaciente"; | ||
lstboxPacienteDoctor.SelectedValuePath = "Id"; | ||
lstboxPacienteDoctor.ItemsSource = pacientesTabla.DefaultView; | ||
} | ||
} | ||
``` | ||
|
||
- Crear registro con INSERT | ||
```cs | ||
private void btnRegistrar(object sender, RoutedEventArgs e) | ||
{ | ||
try | ||
{ | ||
string nombre = txtNombre.Text; | ||
string apellido1 = txtApellido1.Text; | ||
string apellido2 = txtApellido2.Text; | ||
string especialidad = cmbEspecialidades.Text; | ||
string consulta = "INSERT INTO Doctor (Nombre, Apellido1, Apellido2, Especialidad) " + | ||
$"VALUES ('{nombre}', '{apellido1}', '{apellido2}', '{especialidad}')"; | ||
SqlCommand miComandoSql = new SqlCommand(consulta, miConexionSql); | ||
miConexionSql.Open(); | ||
miComandoSql.ExecuteNonQuery(); | ||
miConexionSql.Close(); | ||
MessageBox.Show("Doctor insertado correctamente!"); | ||
} | ||
catch (Exception ex) | ||
{ | ||
MessageBox.Show("Error al insertar el doctor: " + ex.Message); | ||
} | ||
} | ||
``` | ||
|
||
- Borrar registro con DELETE | ||
```cs | ||
private void btnEliminar(object sender, RoutedEventArgs e) | ||
{ | ||
// MessageBox.Show(lstboxHospitalizacion.SelectedValue.ToString()); | ||
string consulta = "DELETE FROM Hospitalizacion WHERE ID=@id_hospitalizacion"; | ||
|
||
SqlCommand miSqlCommand = new SqlCommand(consulta, miConexionSql); | ||
miConexionSql.Open(); | ||
miSqlCommand.Parameters.AddWithValue("@id_hospitalizacion", lstboxHospitalizacion.SelectedValue); | ||
miSqlCommand.ExecuteNonQuery(); | ||
miConexionSql.Close(); | ||
MessageBox.Show("Hospitalización eliminada!"); | ||
} | ||
``` | ||
|
||
- Actualizar registro con UPDATE, pero se puede rellenar los listboxes y usar btnRegistrar | ||
|
||
- Primero se han de rellenar los datos en los campos | ||
```cs | ||
public void RellenarDatos() | ||
{ | ||
string consulta = "SELECT Nombre, Apellido1, Fecha_Nacimiento, Telefono FROM Paciente WHERE ID=@relleno;"; | ||
|
||
SqlCommand comandoSQL = new SqlCommand(consulta, miConexionSql); | ||
|
||
SqlDataAdapter miAdaptadorSql = new SqlDataAdapter(comandoSQL); | ||
|
||
miConexionSql.Open(); | ||
using (miAdaptadorSql) | ||
{ | ||
comandoSQL.Parameters.AddWithValue("@relleno", lstPacientes.SelectedValue); | ||
DataTable pacientesTabla = new DataTable(); | ||
miAdaptadorSql.Fill(pacientesTabla); | ||
|
||
txtNombre.Text = pacientesTabla.Rows[0]["Nombre"].ToString(); | ||
txtPrimerApellido.Text = pacientesTabla.Rows[0]["Apellido1"].ToString(); | ||
txtSegundoApellido.Text = pacientesTabla.Rows[0]["Apellido2"].ToString(); | ||
//dpFechaNamcimiento.SelectedDate = pacientesTabla.Rows[0]["Fecha_Nacimiento"]; | ||
txtDireccion.Text = pacientesTabla.Rows[0]["Direccion"].ToString(); | ||
txtTelefono.Text = pacientesTabla.Rows[0]["Telefono"].ToString(); | ||
txtEmail.Text = pacientesTabla.Rows[0]["Email"].ToString(); | ||
} | ||
miConexionSql.Close(); | ||
} | ||
``` | ||
|
||
- Luego podemos actualizar el registro modificando los datos anteriores | ||
```cs | ||
private void Modificar() | ||
{ | ||
try | ||
{ | ||
string nombre = txtNombre.Text; | ||
string apellido1 = txtApellido1.Text; | ||
string apellido2 = txtApellido2.Text; | ||
string consulta = $"UPDATE Doctor SET Nombre='{nombre}', Apellido1='{apellido1}', Apellido2='{apellido2}' WHERE ID = @idDoctor;"; | ||
using (SqlCommand command = new SqlCommand(consulta, miConexionSql)) | ||
{ | ||
miConexionSql.Open(); | ||
command.Parameters.AddWithValue("@idDoctor", lstDoctores.SelectedValue); | ||
command.ExecuteNonQuery(); | ||
miConexionSql.Close(); | ||
} | ||
MessageBox.Show("Doctor modificado."); | ||
} | ||
catch (Exception ex) | ||
{ | ||
MessageBox.Show("Error al modificar el doctor: " + ex.Message); | ||
} | ||
} | ||
|
||
// Opción de chatGPT | ||
private void btnModificar(object sender, RoutedEventArgs e) | ||
{ | ||
string query = "UPDATE Doctor SET Nombre = @Nombre, Apellido1 = @Apellido1, Apellido2 = @Apellido2 WHERE Id = @Id"; | ||
|
||
using (SqlCommand command = new SqlCommand(query, connection)) | ||
{ | ||
command.Parameters.AddWithValue("@Nombre", doctor.Nombre); | ||
command.Parameters.AddWithValue("@Apellido1", doctor.Apellido1); | ||
command.Parameters.AddWithValue("@Apellido2", doctor.Apellido2); | ||
command.Parameters.AddWithValue("@Id", doctor.Id); | ||
|
||
connection.Open(); | ||
command.ExecuteNonQuery(); | ||
} | ||
|
||
MessageBox.Show("Tabla modificada!"); | ||
} | ||
|
||
private void lstboxPacienteDoctor_SelectionChanged(object sender, SelectionChangedEventArgs e) | ||
{ | ||
// Verificar si se ha seleccionado un elemento en el ListBox | ||
if (lstboxPacienteDoctor.SelectedItem != null) | ||
{ | ||
Paciente pacienteSeleccionado = (Paciente)lstboxPacienteDoctor.SelectedItem; | ||
|
||
// Asignar los valores del paciente seleccionado a los TextBox | ||
txtNombre.Text = pacienteSeleccionado.Nombre; | ||
txtApellido1.Text = pacienteSeleccionado.Apellido1; | ||
txtApellido2.Text = pacienteSeleccionado.Apellido2; | ||
} | ||
} | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
# Conexión a la base de datos | ||
|
||
Si estamos trabajando en un aplicación con interfaz gráfica programada en C# desde Visual Studio y queremos conectarnos a una base de datos Microsoft SQL server, tenemos que hacer uso de la clase `SqlConnection` del espacio de nombres System.Data.SqlClient | ||
|
||
De esta forma podremos ejecutar consultas SQL para defnir datos DDL, manejar datos DML, etc. | ||
|
||
Para utilizar `SqlConnection`, primero debes agregar la referencia al ensamblado `System.Data.SqlClient` a tu proyecto. Luego, puedes crear una instancia de `SqlConnection` para establecer una conexión con tu base de datos de SQL Server. La cadena de conexión que pases como argumento al constructor de `SqlConnection` debe contener información sobre cómo conectarse a la base de datos, como el servidor, la base de datos, las credenciales de autenticación, etc. | ||
|
||
Aquí dos ejemplos básicos para conectarnos a la base de datos SQL server | ||
|
||
1. Conexión a la base de datos con constructor de la ventana vacío | ||
```cs | ||
namespace App | ||
{ | ||
public partial class Ventana : Window | ||
{ | ||
SqlConnection miConexionSql; | ||
|
||
public Ventana() | ||
{ | ||
InitializeComponent(); | ||
|
||
string cadenaConexion = ConfigurationManager.ConnectionStrings["valor de name en App.config"].ConnectionString; | ||
miConexionSql = new SqlConnection(cadenaConexion); | ||
} | ||
|
||
// Métodos de la ventana | ||
} | ||
} | ||
``` | ||
|
||
2. Conexión a la base de datos con constructor que recibe la cadena de conexión | ||
```cs | ||
namespace App | ||
{ | ||
public partial class Ventana : Window | ||
{ | ||
private SqlConnection miConexionSql; | ||
|
||
// Constructor de la ventana | ||
public Ventana() | ||
{ | ||
InitializeComponent(); | ||
InicializarConexion(); | ||
|
||
// InicializarConexion() equivale a esto sin try-catch | ||
//ConexionSQL conexionSQL = new ConexionSQL(); | ||
//string cadenaConexion = conexionSQL.crearConexion(); | ||
//miConexionSql = new SqlConnection(cadenaConexion); | ||
} | ||
|
||
// Constructor con sobrecarga, tiene como parámetro de entrada el string de Conexion | ||
public Consulta(SqlConnection miConexionSql) | ||
{ | ||
InitializeComponent(); | ||
this.miConexionSql = miConexionSql; | ||
} | ||
|
||
private void InicializarConexion() | ||
{ | ||
try | ||
{ | ||
ConexionSQL conexionSQL = new ConexionSQL(); | ||
string cadenaConexion = conexionSQL.crearConexion(); | ||
miConexionSql = new SqlConnection(cadenaConexion); | ||
} | ||
catch (Exception ex) | ||
{ | ||
// Mostrar excepción | ||
MessageBox.Show("Error al conectar a la base de datos: " + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); | ||
} | ||
} | ||
} | ||
``` | ||
|
||
Y clase ConexionSQL con método que devuelve la cadena de conexión: | ||
```cs | ||
namespace App | ||
{ | ||
internal class ConexionSQL | ||
{ | ||
public ConexionSQL() { } | ||
|
||
public string crearConexion () | ||
{ | ||
// cambiar la frase de conexión según el equipo | ||
return ConfigurationManager.ConnectionStrings["valor de name en App.config"].ConnectionString; | ||
} | ||
} | ||
} | ||
``` | ||
|
||
|
||
|
Oops, something went wrong.