¿Cómo conectarse a la base de datos MySQL?

85

Soy muy nuevo en la programación C # pero me gustaría poder acceder a las bases de datos MySQL (no tengo dinero para MS SQL)

Sin embargo, tengo una pregunta; Sé que debe tener "conector MySQL / NET" y "MySQL para Visual Studio" para desarrollar la aplicación C #, pero ¿la persona que instala la aplicación también los requiere? (¿Es posible que pueda liberar la DLL del conector con el programa?)

Gracias

EDITAR: ¿Ambos son necesarios para el usuario final o solo el conector? ¿Hay algo más que necesiten?

user3282097
fuente
3
Sí, todo lo que necesita hacer es empaquetar la DLL con su programa, ya debería estar en su carpeta de depuración / liberación de salida cuando ejecute su programa.
ohmusama
Nota: MySQL para Visual Studio no funciona en VS2010E
Enrique San Martín
En cuanto a la nota anterior de @ EnriqueSanMartín Versión 2.0 y Versión 1.2 Se eliminó el soporte para Microsoft Visual Studio 2010 .
Curiousity

Respuestas:

96

Instale el MySql.Datapaquete NuGet de Oracle .

using MySql.Data;
using MySql.Data.MySqlClient;

namespace Data
{
    public class DBConnection
    {
        private DBConnection()
        {
        }

        private string databaseName = string.Empty;
        public string DatabaseName
        {
            get { return databaseName; }
            set { databaseName = value; }
        }

        public string Password { get; set; }
        private MySqlConnection connection = null;
        public MySqlConnection Connection
        {
            get { return connection; }
        }

        private static DBConnection _instance = null;
        public static DBConnection Instance()
        {
            if (_instance == null)
                _instance = new DBConnection();
           return _instance;
        }

        public bool IsConnect()
        {
            if (Connection == null)
            {
                if (String.IsNullOrEmpty(databaseName))
                    return false;
                string connstring = string.Format("Server=localhost; database={0}; UID=UserName; password=your password", databaseName);
                connection = new MySqlConnection(connstring);
                connection.Open();
            }

            return true;
        }

        public void Close()
        {
            connection.Close();
        }        
    }
}

Ejemplo:

var dbCon = DBConnection.Instance();
dbCon.DatabaseName = "YourDatabase";
if (dbCon.IsConnect())
{
    //suppose col0 and col1 are defined as VARCHAR in the DB
    string query = "SELECT col0,col1 FROM YourTable";
    var cmd = new MySqlCommand(query, dbCon.Connection);
    var reader = cmd.ExecuteReader();
    while(reader.Read())
    {
        string someStringFromColumnZero = reader.GetString(0);
        string someStringFromColumnOne = reader.GetString(1);
        Console.WriteLine(someStringFromColumnZero + "," + someStringFromColumnOne);
    }
    dbCon.Close();
}
Ocph23
fuente
3
Si tiene problemas de conexión a Internet y le gustaría intentarlo hasta que se conecte, esto no funcionará. Eliminar if (_instance == null)línea. También lo hace bool result = falsede forma predeterminada porque es posible que no esté conectado por problemas de conexión a Internet y muchos otros en realidad, no solo porque el nombre de la base de datos no se establecería. En ese caso, if (String.IsNullOrEmpty(databaseName)) return false;porque de lo contrario, solo lanzará una excepción e incluso podría devolver verdadero, lo que no sería correcto. Sin embargo, votó a favor, gracias por el código limpio.
Paréntesis
1
¿Por qué tiene una referencia "circular" con un constructor privado? ( new DBConnection();y private DBConnection())
Soleil - Mathieu Prévot
Habría que hacer connection = nullen DBConnection.Close()ya que es Singleton y es posible que desee volver a utilizarlo
Romano
1
¡Esto es genial para empezar! Ya me he expandido un poco public bool IsConnect(). Para reutilizar la conexión, después de la ifdeclaración: else if (connection.State == System.Data.ConnectionState.Closed) { connection.Open(); }En su aplicación, puede hacerlo dbCon.IsConnect()nuevamente, después de haberla cerrado después de una consulta anterior. Así que no lo haga connection = null;en DBConnection.Close()como se sugiere romana, de lo contrario no funcionará la reutilización.
Larphoid
Gran respuesta, pero ¿cómo me conecto a un puerto determinado? Mi red es que los datos de desarrollo, de prueba y en vivo están en el mismo servidor, pero en puertos diferentes. ¿Cómo puedo conectarme a un solo puerto?
Linux4Life531
54

puede usar el Administrador de paquetes para agregarlo como paquete y es la forma más fácil de hacerlo. No necesita nada más para trabajar con la base de datos mysql.

O puede ejecutar el siguiente comando en Package Manager Console

PM> Install-Package MySql.Data

NUGET Mysql.Data

Damith
fuente
Si lo busca en la ventana "Administrar paquetes NuGet", tenga en cuenta que el nombre del paquete distingue entre mayúsculas y minúsculas . Quizás no sea algo tan obvio para alguien que proviene de administradores de paquetes con nombres en minúsculas.
Dimitry K
13

Debe descargar MySQLConnection NET desde aquí .

Entonces necesitas agregar MySql.Data.DLLa MSVisualStudio así:

  1. Proyecto de menú abierto
  2. Añadir
  3. Referencia
  4. Buscar C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.12\Assemblies\v4.5.2
  5. Agregar MySql.Data.dll

Si quieres saber más visita: ingrese la descripción del enlace aquí

Para usar en el código debe importar la biblioteca:

using MySql.Data.MySqlClient;

Un ejemplo de conexión a la base de datos Mysql (SIN MODO SSL) mediante el evento Click :

using System;
using System.Windows;
using MySql.Data.MySqlClient;


namespace Deportes_WPF
{

public partial class Login : Window
{
    private MySqlConnection connection;
    private string server;
    private string database;
    private string user;
    private string password;
    private string port;
    private string connectionString;
    private string sslM;

    public Login()
    {
        InitializeComponent();

        server = "server_name";
        database = "database_name";
        user = "user_id";
        password = "password";
        port = "3306";
        sslM = "none";

        connectionString = String.Format("server={0};port={1};user id={2}; password={3}; database={4}; SslMode={5}", server, port, user, password, database, sslM);

        connection = new MySqlConnection(connectionString);
    }

    private void conexion()
    {
        try
        {
            connection.Open();

            MessageBox.Show("successful connection");

            connection.Close();
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message + connectionString);
        }
    }

    private void btn1_Click(object sender, RoutedEventArgs e)
    {
        conexion();
    }
  }

}
Sergio Pérez
fuente
3

Mirando el código a continuación, lo probé y encontré: En lugar de escribir DBCon = DBConnection.Instance();, debe poner DBConnection DBCon - new DBConnection();(Eso funcionó para mí)

y en lugar de MySqlComman cmd = new MySqlComman(query, DBCon.GetConnection());poner MySqlCommand cmd = new MySqlCommand(query, DBCon.GetConnection());(falta la d)

Esperanza
fuente
0

Otra biblioteca a considerar es MySqlConnector, https://mysqlconnector.net/ . Mysql.Data está bajo una licencia GPL, mientras que MySqlConnector es MIT.

Andrés
fuente
-4
 private void Initialize()
    {
        server = "localhost";
        database = "connectcsharptomysql";
        uid = "username";
        password = "password";
        string connectionString;
        connectionString = "SERVER=" + server + ";" + "DATABASE=" + 
        database + ";" + "U`enter code here`ID=" + uid + ";" + "PASSWORD=" + password + ";";

        connection = new MySqlConnection(connectionString);
    }
neelakanta
fuente
15
Ha copiado esto de codeproject.com/Articles/43438/Connect-C-to-MySQL Esta ya es la respuesta de "bout Hamed Shams"
Elmue
Estoy de acuerdo, @Elmue -
Momoro