MySQLデータベースに接続する方法は?


88

私はC#プログラミングに非常に慣れていませんが、MySQLデータベースにアクセスできるようにしたいと思っています(MS SQLのお金がありません)

ただし、質問が1つあります。C#アプリケーションを開発するには、「MySQLconnector / NET」と「MySQLforVisual Studio」が必要ですが、アプリケーションをインストールする人も必要ですか?(プログラムでコネクタDLLを解放することは可能ですか?)

ありがとう

編集:それらの両方がエンドユーザーに必要ですか、それともコネクタだけに必要ですか?他に必要なものはありますか?


4
はい、あなたがする必要があるのはあなたのプログラムと一緒にDLLをパッケージ化することだけです、あなたがあなたのプログラムを実行するときそれはあなたの出力デバッグ/リリースフォルダにすでにあるはずです。
オームサマ2014

注:Visual Studio用のMySQLはVS2010Eでは動作しない
エンリケ・サンマルティン

@EnriqueSanMartínバージョン2.0およびバージョン1.2 による上記の注記については、Microsoft Visual Studio2010のサポートが削除されました
好奇心2017

あなたはポート3306上で直接SSHからMySQLに接続するのではなくする必要がある場合はこちらを参照してくださいstackoverflow.com/questions/10806799/...
マシュー・ロック

回答:


99

OracleのMySql.DataNuGetパッケージをインストールします。

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

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

        public string Server { get; set; }
        public string DatabaseName { get; set; }
        public string UserName { get; set; }
        public string Password { get; set; }

        private MySqlConnection Connection { get; set;}

        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={0}; database={1}; UID={2}; password={3}", Server, DatabaseName, UserName, Password);
                Connection = new MySqlConnection(connstring);
                Connection.Open();
            }
    
            return true;
        }
    
        public void Close()
        {
            Connection.Close();
        }        
    }
}

例:

var dbCon = DBConnection.Instance();
dbCon.Server = "YourServer";
dbCon.DatabaseName = "YourDatabase";
dbCon.UserName = "YourUsername";
dbCon.Password = "YourPassword";
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();
}

4
インターネット接続の問題に直面する可能性があり、接続するまで試してみたい場合は、これは機能しません。if (_instance == null)行を削除します。またbool result = false、データベース名が設定されないという理由だけでなく、インターネット接続の問題や他の多くの問題のために接続されていない可能性があるため、デフォルトで作成します。その場合if (String.IsNullOrEmpty(databaseName)) return false;、それ以外の場合は例外がスローされ、trueが返される可能性があるため、正しくありません。しかし、クリーンなコードに感謝します。
ブラケット

2
なぜプライベートコンストラクターで「循環」参照があるのですか?(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()、前のクエリの後で接続を閉じた後、もう一度実行できます。したがって、Romanが提案しconnection = null;DBConnection.Close()ように実行しないでください。そうしないと、再利用が機能しません。
ラルフォイド

すばらしい答えですが、特定のポートに接続するにはどうすればよいですか。私のネットワークでは、開発データ、テストデータ、ライブデータの両方が同じサーバー上にありますが、ポートは異なります。1つのポートに接続するにはどうすればよいですか。
Linux4Life5 3120年

54

パッケージマネージャーを使用してパッケージとして追加できます。これが最も簡単な方法です。mysqlデータベースを操作するために他に何も必要ありません。

または、パッケージマネージャーコンソールで以下のコマンドを実行できます

PM> Install-Package MySql.Data

NUGET Mysql.Data


[NuGetパッケージの管理]ウィンドウで検索する場合は、パッケージ名で大文字と小文字が区別されることに注意してください。小文字の名前を持つパッケージマネージャーから来た人にとっては、それほど明白なことではないかもしれません。
Dimitry K

15

ここからMySQLConnectionNETをダウンロードする必要があります

次に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データベースへのconnectio(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が欠けています)


0

考慮すべきもう1つのライブラリは、MySqlConnector、https: //mysqlconnector.net/です。Mysql.DataはGPLライセンスの下にありますが、MySqlConnectorはMITです。


-5
 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からコピーしました。これはすでに「
boutHamedShams

-私は、@Elmue同意
Momoro
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.