Saltar al pie de página
.NET AYUDA

C# Conexión MySQL (Cómo Funciona para Desarrolladores)

Introducción a la integración de MySQL en C

Conectar aplicaciones C# a bases de datos MySQL permite a los desarrolladores aprovechar el poder de una base de datos relacional para almacenar, recuperar y gestionar datos de manera eficiente. Esta guía proporciona un proceso paso a paso para integrar MySQL con aplicaciones C# y demuestra cómo generar PDF desde los datos dentro de tu base de datos MySQL utilizando la biblioteca IronPDF.

Prerrequisitos

Para seguir esta guía, necesitarás:

  • Visual Studio o cualquier IDE de C#
  • Una base de datos MySQL (instalada y en funcionamiento)
  • La biblioteca IronPDF (para generación de PDF)

Cómo configurar una base de datos MySQL

Instalación y configuración de MySQL

  1. Descarga la última versión de MySQL desde mysql.com.
  2. Ejecuta el instalador y sigue las instrucciones de configuración. Selecciona "Desarrollador por defecto" para incluir el servidor MySQL y MySQL Workbench.
  3. Configura las credenciales del usuario root de MySQL durante la configuración y asegúrate de que el servicio MySQL esté en funcionamiento.

Creación de una base de datos y tablas de ejemplo

  1. Abre MySQL Workbench y conecta al servidor.
  2. Crea una nueva base de datos y una tabla de muestra usando comandos SQL:
CREATE DATABASE SampleDB;
USE SampleDB;
CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY AUTO_INCREMENT,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Position VARCHAR(50),
    Salary DECIMAL(10, 2)
);
  1. Inserta datos de muestra:
INSERT INTO Employees (FirstName, LastName, Position, Salary) 
VALUES ('John', 'Doe', 'Software Developer', 80000),
       ('Jane', 'Smith', 'Data Analyst', 75000);

Cómo configurar un usuario MySQL para acceso remoto (opcional)

Para acceso remoto, crea un usuario MySQL con los permisos necesarios:

CREATE USER 'remoteUser'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON SampleDB.* TO 'remoteUser'@'%';
FLUSH PRIVILEGES;

Conexión de C# a una base de datos MySQL

Instalación de la biblioteca MySql.Data en C#;

Para conectar aplicaciones C# a MySQL, utilizamos la biblioteca MySQL Connector/NET (a menudo llamada Connector/NET). Este es el controlador oficial .NET para MySQL, que se puede instalar a través de NuGet.

  1. Abre Visual Studio y crea una nueva aplicación de consola C#.
  2. Agrega la biblioteca MySql.Data a través del Administrador de paquetes NuGet:
    • Haz clic derecho en el proyecto > Administrar paquetes NuGet > Buscar > busca MySql.Data e instálalo.

Escribir el código de conexión

El siguiente ejemplo de código demuestra cómo establecer una conexión con MySQL:

using System;
using MySql.Data.MySqlClient;

public class Program
{
    // Connection string containing the server, database, user credentials, etc.
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    private void Initialize()
    {
        // Create a MySQL connection object
        MySqlConnection connection = new MySqlConnection(connectionString);
        try
        {
            connection.Open();
            Console.WriteLine("Connected to MySQL Database!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
        finally
        {
            connection.Close(); // Ensure the connection is closed after use
        }
    }
}
using System;
using MySql.Data.MySqlClient;

public class Program
{
    // Connection string containing the server, database, user credentials, etc.
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    private void Initialize()
    {
        // Create a MySQL connection object
        MySqlConnection connection = new MySqlConnection(connectionString);
        try
        {
            connection.Open();
            Console.WriteLine("Connected to MySQL Database!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
        finally
        {
            connection.Close(); // Ensure the connection is closed after use
        }
    }
}
Imports System
Imports MySql.Data.MySqlClient

Public Class Program
	' Connection string containing the server, database, user credentials, etc.
	Private connectionString As String = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;"

	Private Sub Initialize()
		' Create a MySQL connection object
		Dim connection As New MySqlConnection(connectionString)
		Try
			connection.Open()
			Console.WriteLine("Connected to MySQL Database!")
		Catch ex As Exception
			Console.WriteLine($"Error: {ex.Message}")
		Finally
			connection.Close() ' Ensure the connection is closed after use
		End Try
	End Sub
End Class
$vbLabelText   $csharpLabel

Explicación:

  • Cadena de conexión: Contiene detalles como servidor, nombre de la base de datos, ID de usuario y contraseña.
  • MySqlConnection: Se utiliza para establecer la conexión.
  • Método Open(): Intenta abrir la conexión.
  • Manejo de excepciones: Captura excepciones para manejar errores de conexión de manera adecuada.

Uso de registros DNS SRV para la conexión (opcional)

Si tu aplicación está alojada en la nube o necesita conectarse a una base de datos MySQL a través de registros DNS SRV, puedes reemplazar el nombre del servidor con la entrada DNS correspondiente que resuelve la IP de la base de datos.

string connectionString = "Server=mysql.example.com;Database=SampleDB;User ID=root;Password=yourpassword;";
string connectionString = "Server=mysql.example.com;Database=SampleDB;User ID=root;Password=yourpassword;";
Dim connectionString As String = "Server=mysql.example.com;Database=SampleDB;User ID=root;Password=yourpassword;"
$vbLabelText   $csharpLabel

Connection Pooling

Por defecto, MySQL Connector/NET soporta el agrupamiento de conexiones, lo que ayuda a manejar las conexiones a la base de datos de manera más eficiente. El agrupamiento de conexiones reduce la sobrecarga de abrir y cerrar conexiones repetidamente reutilizando conexiones existentes de un pool.

Si deseas personalizar el comportamiento del agrupamiento de conexiones, puedes ajustar tu cadena de conexión de esta manera:

string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;Pooling=true;";
string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;Pooling=true;";
Dim connectionString As String = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;Pooling=true;"
$vbLabelText   $csharpLabel

Manejo de errores comunes

Los problemas comunes incluyen cadenas de conexión incorrectas, restricciones de firewall o el servicio MySQL no en funcionamiento. Asegúrate de que todos los detalles de configuración sean correctos y que el servicio MySQL esté activo.

Realización de operaciones CRUD con C# y MySQL

Creación de una clase C# para operaciones de base de datos

Para organizar el código, crea una clase DatabaseHelper para manejar todas las operaciones de base de datos. Esta clase contendrá métodos para Insertar, Leer, Actualizar y Borrar datos (operaciones CRUD).

using System;
using MySql.Data.MySqlClient;

public class DatabaseHelper
{
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    // Method to insert a new employee record
    public void InsertEmployee(string firstName, string lastName, string position, decimal salary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)";
            MySqlCommand cmd = new MySqlCommand(query, connection);

            // Add parameters to prevent SQL injection
            cmd.Parameters.AddWithValue("@FirstName", firstName);
            cmd.Parameters.AddWithValue("@LastName", lastName);
            cmd.Parameters.AddWithValue("@Position", position);
            cmd.Parameters.AddWithValue("@Salary", salary);

            connection.Open();
            cmd.ExecuteNonQuery(); // Execute the insert command
        }
    }
}
using System;
using MySql.Data.MySqlClient;

public class DatabaseHelper
{
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    // Method to insert a new employee record
    public void InsertEmployee(string firstName, string lastName, string position, decimal salary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)";
            MySqlCommand cmd = new MySqlCommand(query, connection);

            // Add parameters to prevent SQL injection
            cmd.Parameters.AddWithValue("@FirstName", firstName);
            cmd.Parameters.AddWithValue("@LastName", lastName);
            cmd.Parameters.AddWithValue("@Position", position);
            cmd.Parameters.AddWithValue("@Salary", salary);

            connection.Open();
            cmd.ExecuteNonQuery(); // Execute the insert command
        }
    }
}
Imports System
Imports MySql.Data.MySqlClient

Public Class DatabaseHelper
	Private connectionString As String = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;"

	' Method to insert a new employee record
	Public Sub InsertEmployee(ByVal firstName As String, ByVal lastName As String, ByVal position As String, ByVal salary As Decimal)
		Using connection = New MySqlConnection(connectionString)
			Dim query As String = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)"
			Dim cmd As New MySqlCommand(query, connection)

			' Add parameters to prevent SQL injection
			cmd.Parameters.AddWithValue("@FirstName", firstName)
			cmd.Parameters.AddWithValue("@LastName", lastName)
			cmd.Parameters.AddWithValue("@Position", position)
			cmd.Parameters.AddWithValue("@Salary", salary)

			connection.Open()
			cmd.ExecuteNonQuery() ' Execute the insert command
		End Using
	End Sub
End Class
$vbLabelText   $csharpLabel

Explicación:

  • Parámetrización: Usar @Parameter reduce el riesgo de inyección SQL.
  • connection.Open(): Abre la conexión MySQL.
  • cmd.ExecuteNonQuery(): Ejecuta la consulta de inserción.

Insertar datos en una base de datos MySQL

Para agregar nuevos datos de empleados, llama al método InsertEmployee:

DatabaseHelper dbHelper = new DatabaseHelper();
dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000);
DatabaseHelper dbHelper = new DatabaseHelper();
dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000);
Dim dbHelper As New DatabaseHelper()
dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000)
$vbLabelText   $csharpLabel

Recuperación y visualización de datos

Recupera datos y muéstralos en la consola:

public void GetEmployees()
{
    using (var connection = new MySqlConnection(connectionString))
    {
        string query = "SELECT * FROM Employees";
        MySqlCommand cmd = new MySqlCommand(query, connection);
        connection.Open();

        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                Console.WriteLine($"{reader["FirstName"]} {reader["LastName"]}, Position: {reader["Position"]}, Salary: {reader["Salary"]}");
            }
        }
    }
}
public void GetEmployees()
{
    using (var connection = new MySqlConnection(connectionString))
    {
        string query = "SELECT * FROM Employees";
        MySqlCommand cmd = new MySqlCommand(query, connection);
        connection.Open();

        using (MySqlDataReader reader = cmd.ExecuteReader())
        {
            while (reader.Read())
            {
                Console.WriteLine($"{reader["FirstName"]} {reader["LastName"]}, Position: {reader["Position"]}, Salary: {reader["Salary"]}");
            }
        }
    }
}
Public Sub GetEmployees()
	Using connection = New MySqlConnection(connectionString)
		Dim query As String = "SELECT * FROM Employees"
		Dim cmd As New MySqlCommand(query, connection)
		connection.Open()

		Using reader As MySqlDataReader = cmd.ExecuteReader()
			Do While reader.Read()
				Console.WriteLine($"{reader("FirstName")} {reader("LastName")}, Position: {reader("Position")}, Salary: {reader("Salary")}")
			Loop
		End Using
	End Using
End Sub
$vbLabelText   $csharpLabel

Explicación:

  • ExecuteReader(): Ejecuta la consulta de selección y devuelve un objeto MySqlDataReader.
  • reader.Read(): Itera a través del conjunto de resultados, mostrando los detalles de cada empleado.

Actualización y eliminación de registros

Aquí hay un ejemplo para actualizar el salario de un empleado:

public void UpdateEmployeeSalary(int employeeId, decimal newSalary)
{
    using (var connection = new MySqlConnection(connectionString))
    {
        string query = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID";
        MySqlCommand cmd = new MySqlCommand(query, connection);

        // Parameterize the SQL command
        cmd.Parameters.AddWithValue("@Salary", newSalary);
        cmd.Parameters.AddWithValue("@EmployeeID", employeeId);

        connection.Open();
        cmd.ExecuteNonQuery(); // Execute the update command
        Console.WriteLine("Employee salary updated successfully!");
    }
}
public void UpdateEmployeeSalary(int employeeId, decimal newSalary)
{
    using (var connection = new MySqlConnection(connectionString))
    {
        string query = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID";
        MySqlCommand cmd = new MySqlCommand(query, connection);

        // Parameterize the SQL command
        cmd.Parameters.AddWithValue("@Salary", newSalary);
        cmd.Parameters.AddWithValue("@EmployeeID", employeeId);

        connection.Open();
        cmd.ExecuteNonQuery(); // Execute the update command
        Console.WriteLine("Employee salary updated successfully!");
    }
}
Public Sub UpdateEmployeeSalary(ByVal employeeId As Integer, ByVal newSalary As Decimal)
	Using connection = New MySqlConnection(connectionString)
		Dim query As String = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID"
		Dim cmd As New MySqlCommand(query, connection)

		' Parameterize the SQL command
		cmd.Parameters.AddWithValue("@Salary", newSalary)
		cmd.Parameters.AddWithValue("@EmployeeID", employeeId)

		connection.Open()
		cmd.ExecuteNonQuery() ' Execute the update command
		Console.WriteLine("Employee salary updated successfully!")
	End Using
End Sub
$vbLabelText   $csharpLabel

Comando de actualización: Utiliza una consulta parametrizada para actualizar la columna Salary basada en EmployeeID.

Generación de PDF a partir de datos MySQL con IronPDF

Introducción a IronPDF

IronPDF es una biblioteca robusta que permite a los desarrolladores crear, editar y manipular documentos PDF fácilmente dentro de aplicaciones C#. Soporta una amplia gama de funcionalidades PDF, convirtiéndola en una herramienta perfecta para aplicaciones basadas en datos que requieren generación de informes automatizados, manipulación de documentos o conversión de HTML a PDF. Ya sea que necesites convertir páginas web dinámicas a archivos PDF o generar PDFs personalizados desde cero, IronPDF simplifica el proceso con unas pocas líneas de código.

Características principales de IronPDF

  • Conversión de HTML a PDF: Una de las características destacadas de IronPDF es su capacidad de convertir contenido HTML en documentos PDF completamente formateados. Esta característica es particularmente útil para generar informes a partir de contenido web dinámico o cuando se trabaja con datos almacenados en un formato web.
  • Edición de PDFs: IronPDF permite editar PDFs existentes, incluyendo la adición, eliminación y modificación de contenido, como texto, imágenes, tablas y más. Esto es ideal para aplicaciones que necesitan procesar o actualizar documentos preexistentes.
  • Fusión y división de PDFs: Con IronPDF, puedes fácilmente fusionar múltiples PDFs en un solo documento o dividir un PDF grande en archivos más pequeños. Esta característica es útil para organizar y gestionar grandes colecciones de documentos.
  • Estilización y personalización: Al generar PDFs desde HTML, puedes usar CSS para dar estilo al documento y lograr un diseño personalizado que coincida con el diseño de tu aplicación. IronPDF te da control total sobre la apariencia de tus PDFs, asegurando que cumplan con tus requisitos específicos.

Cómo configurar IronPDF en su proyecto de C

Para usar IronPDF, instálalo a través del Gestor de Paquetes NuGet en Visual Studio:

Install-Package IronPdf

Convertir datos MySQL a formato PDF

Aquí tienes el ejemplo completo de código que muestra cómo crear un informe PDF de datos de empleados:

using System;
using MySql.Data.MySqlClient;
using IronPdf;

public class Program
{
    private static string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    public static void Main(string[] args)
    {
        // Perform CRUD operations
        DatabaseHelper dbHelper = new DatabaseHelper();
        // Insert a new employee
        dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000);
        // Display employees
        dbHelper.GetEmployees();
        // Update an employee's salary
        dbHelper.UpdateEmployeeSalary(1, 95000);
        // Generate a PDF report
        dbHelper.GenerateEmployeeReportPDF();
        Console.WriteLine("Operations completed.");
    }
}

public class DatabaseHelper
{
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    // Insert employee into database
    public void InsertEmployee(string firstName, string lastName, string position, decimal salary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.Parameters.AddWithValue("@FirstName", firstName);
            cmd.Parameters.AddWithValue("@LastName", lastName);
            cmd.Parameters.AddWithValue("@Position", position);
            cmd.Parameters.AddWithValue("@Salary", salary);
            connection.Open();
            cmd.ExecuteNonQuery();
            Console.WriteLine($"Employee {firstName} {lastName} inserted successfully!");
        }
    }

    // Get employees from the database and display them
    public void GetEmployees()
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "SELECT * FROM Employees";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            connection.Open();

            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                Console.WriteLine("\nEmployee List:");
                while (reader.Read())
                {
                    Console.WriteLine($"{reader["EmployeeID"]} - {reader["FirstName"]} {reader["LastName"]}, Position: {reader["Position"]}, Salary: {reader["Salary"]}");
                }
            }
        }
    }

    // Update the salary of an employee
    public void UpdateEmployeeSalary(int employeeId, decimal newSalary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.Parameters.AddWithValue("@Salary", newSalary);
            cmd.Parameters.AddWithValue("@EmployeeID", employeeId);
            connection.Open();
            cmd.ExecuteNonQuery();
            Console.WriteLine($"Employee ID {employeeId}'s salary updated to {newSalary}.");
        }
    }

    // Generate a PDF report of all employees
    public void GenerateEmployeeReportPDF()
    {
        string htmlContent = "<h1>Employee Report</h1><table border='1'><tr><th>EmployeeID</th><th>First Name</th><th>Last Name</th><th>Position</th><th>Salary</th></tr>";

        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "SELECT * FROM Employees";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            connection.Open();

            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    htmlContent += $"<tr><td>{reader["EmployeeID"]}</td><td>{reader["FirstName"]}</td><td>{reader["LastName"]}</td><td>{reader["Position"]}</td><td>{reader["Salary"]}</td></tr>";
                }
            }
        }

        htmlContent += "</table>";

        // Use IronPDF to convert HTML to PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("EmployeeReport.pdf");
        Console.WriteLine("PDF Report generated successfully!");
    }
}
using System;
using MySql.Data.MySqlClient;
using IronPdf;

public class Program
{
    private static string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    public static void Main(string[] args)
    {
        // Perform CRUD operations
        DatabaseHelper dbHelper = new DatabaseHelper();
        // Insert a new employee
        dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000);
        // Display employees
        dbHelper.GetEmployees();
        // Update an employee's salary
        dbHelper.UpdateEmployeeSalary(1, 95000);
        // Generate a PDF report
        dbHelper.GenerateEmployeeReportPDF();
        Console.WriteLine("Operations completed.");
    }
}

public class DatabaseHelper
{
    private string connectionString = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;";

    // Insert employee into database
    public void InsertEmployee(string firstName, string lastName, string position, decimal salary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.Parameters.AddWithValue("@FirstName", firstName);
            cmd.Parameters.AddWithValue("@LastName", lastName);
            cmd.Parameters.AddWithValue("@Position", position);
            cmd.Parameters.AddWithValue("@Salary", salary);
            connection.Open();
            cmd.ExecuteNonQuery();
            Console.WriteLine($"Employee {firstName} {lastName} inserted successfully!");
        }
    }

    // Get employees from the database and display them
    public void GetEmployees()
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "SELECT * FROM Employees";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            connection.Open();

            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                Console.WriteLine("\nEmployee List:");
                while (reader.Read())
                {
                    Console.WriteLine($"{reader["EmployeeID"]} - {reader["FirstName"]} {reader["LastName"]}, Position: {reader["Position"]}, Salary: {reader["Salary"]}");
                }
            }
        }
    }

    // Update the salary of an employee
    public void UpdateEmployeeSalary(int employeeId, decimal newSalary)
    {
        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.Parameters.AddWithValue("@Salary", newSalary);
            cmd.Parameters.AddWithValue("@EmployeeID", employeeId);
            connection.Open();
            cmd.ExecuteNonQuery();
            Console.WriteLine($"Employee ID {employeeId}'s salary updated to {newSalary}.");
        }
    }

    // Generate a PDF report of all employees
    public void GenerateEmployeeReportPDF()
    {
        string htmlContent = "<h1>Employee Report</h1><table border='1'><tr><th>EmployeeID</th><th>First Name</th><th>Last Name</th><th>Position</th><th>Salary</th></tr>";

        using (var connection = new MySqlConnection(connectionString))
        {
            string query = "SELECT * FROM Employees";
            MySqlCommand cmd = new MySqlCommand(query, connection);
            connection.Open();

            using (MySqlDataReader reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    htmlContent += $"<tr><td>{reader["EmployeeID"]}</td><td>{reader["FirstName"]}</td><td>{reader["LastName"]}</td><td>{reader["Position"]}</td><td>{reader["Salary"]}</td></tr>";
                }
            }
        }

        htmlContent += "</table>";

        // Use IronPDF to convert HTML to PDF
        ChromePdfRenderer renderer = new ChromePdfRenderer();
        PdfDocument pdf = renderer.RenderHtmlAsPdf(htmlContent);
        pdf.SaveAs("EmployeeReport.pdf");
        Console.WriteLine("PDF Report generated successfully!");
    }
}
Imports Microsoft.VisualBasic
Imports System
Imports MySql.Data.MySqlClient
Imports IronPdf

Public Class Program
	Private Shared connectionString As String = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;"

	Public Shared Sub Main(ByVal args() As String)
		' Perform CRUD operations
		Dim dbHelper As New DatabaseHelper()
		' Insert a new employee
		dbHelper.InsertEmployee("Alice", "Brown", "Project Manager", 90000)
		' Display employees
		dbHelper.GetEmployees()
		' Update an employee's salary
		dbHelper.UpdateEmployeeSalary(1, 95000)
		' Generate a PDF report
		dbHelper.GenerateEmployeeReportPDF()
		Console.WriteLine("Operations completed.")
	End Sub
End Class

Public Class DatabaseHelper
	Private connectionString As String = "Server=localhost;Database=SampleDB;User ID=root;Password=yourpassword;"

	' Insert employee into database
	Public Sub InsertEmployee(ByVal firstName As String, ByVal lastName As String, ByVal position As String, ByVal salary As Decimal)
		Using connection = New MySqlConnection(connectionString)
			Dim query As String = "INSERT INTO Employees (FirstName, LastName, Position, Salary) VALUES (@FirstName, @LastName, @Position, @Salary)"
			Dim cmd As New MySqlCommand(query, connection)
			cmd.Parameters.AddWithValue("@FirstName", firstName)
			cmd.Parameters.AddWithValue("@LastName", lastName)
			cmd.Parameters.AddWithValue("@Position", position)
			cmd.Parameters.AddWithValue("@Salary", salary)
			connection.Open()
			cmd.ExecuteNonQuery()
			Console.WriteLine($"Employee {firstName} {lastName} inserted successfully!")
		End Using
	End Sub

	' Get employees from the database and display them
	Public Sub GetEmployees()
		Using connection = New MySqlConnection(connectionString)
			Dim query As String = "SELECT * FROM Employees"
			Dim cmd As New MySqlCommand(query, connection)
			connection.Open()

			Using reader As MySqlDataReader = cmd.ExecuteReader()
				Console.WriteLine(vbLf & "Employee List:")
				Do While reader.Read()
					Console.WriteLine($"{reader("EmployeeID")} - {reader("FirstName")} {reader("LastName")}, Position: {reader("Position")}, Salary: {reader("Salary")}")
				Loop
			End Using
		End Using
	End Sub

	' Update the salary of an employee
	Public Sub UpdateEmployeeSalary(ByVal employeeId As Integer, ByVal newSalary As Decimal)
		Using connection = New MySqlConnection(connectionString)
			Dim query As String = "UPDATE Employees SET Salary = @Salary WHERE EmployeeID = @EmployeeID"
			Dim cmd As New MySqlCommand(query, connection)
			cmd.Parameters.AddWithValue("@Salary", newSalary)
			cmd.Parameters.AddWithValue("@EmployeeID", employeeId)
			connection.Open()
			cmd.ExecuteNonQuery()
			Console.WriteLine($"Employee ID {employeeId}'s salary updated to {newSalary}.")
		End Using
	End Sub

	' Generate a PDF report of all employees
	Public Sub GenerateEmployeeReportPDF()
		Dim htmlContent As String = "<h1>Employee Report</h1><table border='1'><tr><th>EmployeeID</th><th>First Name</th><th>Last Name</th><th>Position</th><th>Salary</th></tr>"

		Using connection = New MySqlConnection(connectionString)
			Dim query As String = "SELECT * FROM Employees"
			Dim cmd As New MySqlCommand(query, connection)
			connection.Open()

			Using reader As MySqlDataReader = cmd.ExecuteReader()
				Do While reader.Read()
					htmlContent &= $"<tr><td>{reader("EmployeeID")}</td><td>{reader("FirstName")}</td><td>{reader("LastName")}</td><td>{reader("Position")}</td><td>{reader("Salary")}</td></tr>"
				Loop
			End Using
		End Using

		htmlContent &= "</table>"

		' Use IronPDF to convert HTML to PDF
		Dim renderer As New ChromePdfRenderer()
		Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
		pdf.SaveAs("EmployeeReport.pdf")
		Console.WriteLine("PDF Report generated successfully!")
	End Sub
End Class
$vbLabelText   $csharpLabel

Desglose del código

  1. Conexión a la base de datos MySQL:

    • El connectionString define el servidor MySQL, la base de datos, el usuario y la contraseña.
    • Conectas usando MySqlConnection y manejas operaciones CRUD con MySqlCommand.
  2. Operación de inserción (InsertEmployee):

    • Usa MySqlCommand con consultas parametrizadas (@FirstName, @LastName, etc.) para prevenir inyección SQL.
    • Después de abrir la conexión (connection.Open()), ExecuteNonQuery() ejecuta la instrucción SQL INSERT.
  3. Operación de lectura (GetEmployees):

    • Ejecuta una consulta SELECT * para buscar todos los registros de empleados.
    • Usa un MySqlDataReader para iterar sobre el conjunto de resultados y mostrar cada registro en la consola.
  4. Operación de actualización (UpdateEmployeeSalary):

    • El método acepta un employeeId y un newSalary para actualizar el salario del empleado.
    • Usa una consulta SQL UPDATE parametrizada.
  5. Generación de PDF (GenerateEmployeeReportPDF):
    • Recopila datos de empleados en una cadena HTML con una estructura de tabla simple.
    • El contenido HTML se pasa al método RenderHtmlAsPdf de IronPDF para generar un informe PDF.
    • El PDF resultante se guarda como EmployeeReport.pdf.

Conclusión

En este artículo, recorrimos los pasos esenciales para integrar MySQL con una aplicación C#. Desde configurar la base de datos y realizar operaciones CRUD hasta generar PDFs con IronPDF, cubrimos una amplia gama de temas fundamentales que son cruciales para construir aplicaciones basadas en datos. Aquí tienes un resumen de los conceptos principales:

  • Integración de MySQL y C#: Demostramos cómo conectarse a una base de datos MySQL utilizando la biblioteca MySql.Data, manejar conexiones a la base de datos y realizar operaciones CRUD utilizando consultas parametrizadas. Esto asegura que los datos se puedan almacenar, actualizar y recuperar de manera eficiente de una forma segura y ordenada.
  • Realización de operaciones CRUD: Con los métodos de ejemplo para insertar, actualizar y leer datos de empleados, puedes extender esta lógica para manejar otros tipos de registros en una base de datos del mundo real. El uso de consultas parametrizadas también ayuda a mitigar ataques de inyección SQL, asegurando la seguridad de tu aplicación.
  • IronPDF para generación de PDF: IronPDF hace que sea sencillo generar PDFs de aspecto profesional a partir de contenido HTML dinámico. Al convertir los datos recuperados de MySQL en una tabla HTML, podemos crear informes personalizados y guardarlos como PDFs, lo cual puede ser útil para generar facturas, informes, resúmenes y más. La API sencilla de IronPDF la convierte en una herramienta excelente para cualquier desarrollador C# que necesite manejar la generación de PDF dentro de sus aplicaciones.

Al combinar C# y MySQL, los desarrolladores pueden construir aplicaciones robustas que almacenen y gestionen datos mientras ofrecen funcionalidades avanzadas como la generación de informes en PDF. Estas capacidades son útiles en varias industrias, desde finanzas hasta salud, donde la gestión y generación precisa de datos son críticas.

Para los desarrolladores que buscan incorporar la generación de PDF en sus aplicaciones C#, IronPDF te permite probar el conjunto completo de características. Ya sea que necesites generar documentos simples o informes sofisticados, IronPDF puede ser una herramienta invaluable para automatizar la creación de PDF dentro de tu flujo de trabajo.

Preguntas Frecuentes

¿Cuáles son los requisitos previos para integrar MySQL con aplicaciones C#?

Para integrar MySQL con aplicaciones C#, necesitas un IDE como Visual Studio, una base de datos MySQL en ejecución y IronPDF para generar PDF a partir del contenido de la base de datos.

¿Cómo puedo convertir datos de MySQL en un PDF usando C#?

Puedes convertir datos de MySQL en un PDF transformando primero los datos en una cadena HTML y luego usando el método RenderHtmlAsPdf de IronPDF para generar un documento PDF.

¿Cómo instalo y configuro MySQL para usar con C#?

Instala MySQL descargándolo de mysql.com, ejecuta el instalador y sigue las instrucciones de configuración. Elige 'Developer Default' para que se incluya MySQL Server y Workbench y configura las credenciales del usuario root.

¿Qué biblioteca se recomienda para la conectividad entre C# y MySQL?

Se recomienda la biblioteca MySQL Connector/NET para establecer la conectividad entre aplicaciones C# y una base de datos MySQL. Permite el uso de cadenas de conexión para facilitar la comunicación.

¿Cómo puedo asegurar mis consultas SQL al usar C# con MySQL?

Para asegurar las consultas SQL, usa consultas parametrizadas que ayudan a prevenir ataques de inyección SQL asegurando una validación adecuada de entrada.

¿Qué es el pool de conexiones en el contexto de MySQL y C#?

El pool de conexiones se refiere a la práctica de reutilizar conexiones de base de datos de un pool, lo cual mejora la eficiencia al reducir la sobrecarga asociada con abrir y cerrar conexiones repetidamente.

¿Cómo creo una base de datos y tabla de ejemplo en MySQL para la integración con C#?

Abre MySQL Workbench, conéctate a tu servidor y usa comandos SQL como CREATE DATABASE SampleDB; y CREATE TABLE Employees (...); para configurar una base de datos y tabla de ejemplo.

¿Qué características debo buscar en una biblioteca de PDF para aplicaciones C#?

Una biblioteca robusta de PDF para C# debe ofrecer características como conversión de HTML a PDF, edición de PDF, fusión y división, y la capacidad de aplicar estilos personalizados usando CSS, como las que proporciona IronPDF.

¿Cómo realizo operaciones CRUD en una base de datos MySQL usando C#?

Implementa operaciones CRUD creando una clase de ayuda en C# que use comandos SQL parametrizados dentro de métodos para Insertar, Leer, Actualizar y Borrar datos en la base de datos MySQL.

¿Cómo puedo actualizar los detalles de un empleado en una base de datos MySQL usando C#?

Actualiza los detalles de un empleado escribiendo un método en C# que use un comando UPDATE SQL parametrizado, permitiendo modificaciones como actualizaciones de salario basadas en EmployeeID.

Jacob Mellor, Director de Tecnología @ Team Iron
Director de Tecnología

Jacob Mellor es Director de Tecnología en Iron Software y un ingeniero visionario que lidera la tecnología PDF en C#. Como el desarrollador original detrás de la base de código central de Iron Software, ha moldeado la arquitectura de productos de la compañía desde ...

Leer más