MySQL 데이터베이스에 연결하는 방법은 무엇입니까?


85

저는 C # 프로그래밍을 처음 접했지만 MySQL 데이터베이스에 액세스하고 싶습니다 (MS SQL에 대한 돈이 없음).

그러나 한 가지 질문이 있습니다. C # 응용 프로그램을 개발하려면 "MySQL 커넥터 / NET"및 "MySQL for Visual Studio"가 필요하다는 것을 알고 있지만 응용 프로그램을 설치하는 사람도 필요합니까? (프로그램과 함께 커넥터 DLL을 해제 할 수 있습니까?)

감사

편집 : 둘 다 최종 사용자에게 필요합니까 아니면 커넥터에만 필요합니까? 그들에게 필요한 다른 것이 있습니까?


3
예, 프로그램과 함께 DLL을 패키징하기 만하면됩니다. 프로그램을 실행할 때 이미 출력 디버그 / 릴리스 폴더에 있어야합니다.
ohmusama 2014

참고 : Visual Studio 용 MySQL은 VS2010E에서 작동하지 않습니다
Enrique San Martín

@ EnriqueSanMartín 버전 2.0버전 1.2 의 위 참고 사항에 대해서는 Microsoft Visual Studio 2010에 대한 지원이 제거되었습니다 .
Curiousity

답변:


96

Oracle의 MySql.DataNuGet 패키지를 설치 합니다.

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();
        }        
    }
}

예:

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();
}

3
인터넷 연결 문제에 직면 할 수 있고 연결할 때까지 시도하려는 경우 작동하지 않습니다. if (_instance == null)라인 삭제 . 또한 bool result = false데이터베이스 이름이 설정되지 않았기 때문에 인터넷 연결 문제 및 기타 많은 실제로 연결되지 않을 수 있으므로 기본적으로 만드십시오 . 이 경우 if (String.IsNullOrEmpty(databaseName)) return false;예외가 발생하고 올바르지 않은 true를 반환 할 수도 있기 때문입니다. 그러나 깨끗한 코드에 감사드립니다.
대괄호

1
개인 생성자와 함께 "순환"참조가있는 이유는 무엇입니까? ( new DBConnection();private DBConnection())
솔레 - 마티유 Prévot

당신은해야 할 것 connection = nullDBConnection.Close()이 싱글이기 때문에 당신은 다시 사용할 수 있습니다
로마

1
이것은 시작하기에 좋습니다! 나는 이미 public bool IsConnect(). 연결을 다시 사용하려면 다음 if명령문 뒤에 : else if (connection.State == System.Data.ConnectionState.Closed) { connection.Open(); }애플리케이션 dbCon.IsConnect()에서 이전 쿼리 후 연결을 닫은 후에 다시 수행 할 수 있습니다. 그렇게하지 connection = null;DBConnection.Close(), 그렇지 않으면하지 않습니다 작업을 재사용, 로마 제안한다.
Larphoid

좋은 대답이지만 특정 포트에 어떻게 연결합니까? 내 네트워크는 개발, 테스트 및 라이브 데이터가 모두 동일한 서버에 있지만 다른 포트에 있다는 것입니다. 1 개의 포트에만 연결하려면 어떻게해야합니까?
Linux4Life531

54

패키지 관리자를 사용하여 패키지로 추가 할 수 있으며 가장 쉬운 방법입니다. mysql 데이터베이스로 작업하기 위해 다른 것이 필요하지 않습니다.

또는 패키지 관리자 콘솔에서 아래 명령을 실행할 수 있습니다.

PM> Install-Package MySql.Data

NUGET Mysql.Data


"NuGet 패키지 관리"창을 통해 검색하는 경우 패키지 이름은 대소 문자를 구분 합니다. 소문자 이름을 가진 패키지 관리자에서 온 누군가에게는 그렇게 분명하지 않을 수도 있습니다.
Dimitry K 2015

13

여기 에서 MySQLConnection NET을 다운로드해야합니다 .

그런 다음 다음 MySql.Data.DLL과 같이 MSVisualStudio에 추가해야합니다 .

  1. 메뉴 프로젝트 열기
  2. 더하다
  3. 참고
  4. 찾아보기 C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.12\Assemblies\v4.5.2
  5. MySql.Data.dll 추가

더 많은 방문을 알고 싶다면 여기에 링크 설명을 입력하십시오.

코드에서 사용하려면 라이브러리를 가져와야합니다.

using MySql.Data.MySqlClient;

Click 이벤트를 사용 하여 mysql 데이터베이스에 연결하는 예 (SSL 모드 없음) :

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();
    }
  }

}

3

아래의 코드를 보면, 나는 그것을 시도하고 발견 대신 쓰는 DBCon = DBConnection.Instance();당신이 넣어한다 DBConnection DBCon - new DBConnection();(나를 위해 일한)

대신 MySqlComman cmd = new MySqlComman(query, DBCon.GetConnection());넣어야합니다 MySqlCommand cmd = new MySqlCommand(query, DBCon.GetConnection());(d가 없습니다)



-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);
    }

15
당신은에서이를 복사 한 codeproject.com/Articles/43438/Connect-C-to-MySQL 이 이미 "하메드 샴스의 한판 승부"에서 해답
Elmue

- 나는 @Elmue 동의
Momoro
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.