3

今日、私はコンピューターの前に座って、MySql データベースに接続して使用する方法を試してみました。たくさんの質問がありますが、いくつかにとどめようと思います。

  1. サーバーへの接続を次のステートメントで初期化すると、sqlConnection.Open(); Is this connection now open and ready to use until i tell the server not?

  2. ステートメントは接続を閉じていないようです。Close()サーバーのステータスを見ると、送信後も接続が残っていることがわかります。

  3. setupConnection(); データベースからデータを取得したいとします。まず、この機能が送信する関数を実行してから、Open()true または false を返します。次に、表示や計算などのためにデータを取得する関数がある可能性があります。この関数を呼び出すと、接続を再度開く必要がありますか?

少しまとめると、プログラムが関数と同じスコープ内にある場合にのみ、接続が開かれOpen();ますか?

また、すべての関数でこれを宣言する必要がないようにするにはどうすればよいですか:

MySqlConnection sqlConnection; sqlConnection = 新しい MySqlConnection();

以下は、今日実行しているコードの一部です。

    /// <summary>
    /// InitConnection outputs the connectionstring
    /// </summary>
    /// <param name="Adress">Server adress</param>
    /// <param name="Port">Server port</param>
    /// <param name="Uid">Username</param>
    /// <param name="Pwd">Password</param>
    /// <param name="Database">Database</param>
    /// <returns>the connectionstring</returns>
    public string initConnection(string Adress, string Port, 
         string Uid, string Pwd, string Database)
    {
        return "server=" + Adress + ";port=" + Port + ";uid=" + Uid + ";" +
            "pwd=" + Pwd + ";database=" + Database + ";";
    }

    /// <summary>
    /// setuupConnection will setup an active connection to the database 
    /// specified in initConnection
    /// </summary>
    /// <param name="ConnectionString">The return value of 
    /// initConnection</param>
    /// <returns>True or False</returns>
    public bool setupConnection(string ConnectionString)
    {
        MySqlConnection sqlConnection;
        sqlConnection = new MySqlConnection();
        sqlConnection.ConnectionString = ConnectionString;            
        try
        {
            sqlConnection.Open();
        return true;
        }
        catch (MySqlException ex)
        {
            switch (ex.Number)
            { 
                case 0:
                    MessageBox.Show("Cannot connect to server.");
                    break;
                case 1045:
                    MessageBox.Show("Invalide username/password.");
                    break;
            }
        return false;
        } 
    }

    /// <summary>
    /// closeConnection will terminate the database connection.
    /// </summary>
    /// <returns>True or False</returns>
    public bool closeConnection()
    {
        MySqlConnection sqlConnection;
        sqlConnection = new MySqlConnection();
        try
        {
            sqlConnection.Dispose();
        return true;
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message);
        return false;
        }  
    }
4

4 に答える 4

2

セットアップおよびクローズ機能の範囲内で接続をセットアップしています。接続をセットアップして開くと、関数が終了し、接続がスコープ外になります。close関数では、接続を破棄するためだけに接続を定義していますが、これは意味がありません。接続をセットアップし、開いて、使用してから、閉じます。

変数のスコープを調べて理解する必要があるように思われます。

于 2012-12-08T15:29:39.247 に答える
1

http://connectionstring.comの非常に便利なWebサイトを使用できます。

http://www.connectionstrings.com/mysql

標準

Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

TCPポートの指定

 Server=myServerAddress;Port=1234;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

ポート3306はデフォルトのMySqlポートです。Unixソケットが使用されている場合、この値は無視されます。

複数のサーバーこれを使用して、使用するサーバーを気にせずに、レプリケートされたサーバー構成のサーバーに接続します。

 Server=serverAddress1, serverAddress2, serverAddress3;Database=myDataBase; Uid=myUsername;Pwd=myPassword;

暗号化の使用(旧)これは、クライアントとサーバー間で送信されるすべてのデータに対してSSL暗号化をアクティブにします。サーバーには証明書がインストールされている必要があります。

  Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;Encrypt=true;

このオプションは、Connector/NETバージョン5.0.3から6.2.1で使用できます。6.2.1以降では、代わりにSslModeオプションを使用してください。

暗号化の使用(新規)サーバーがSSLをサポートしている場合はSSLを使用しますが、すべての場合に接続を許可します

  Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

SslMode=優先; このオプションは、Connector/NETバージョン6.2.1から使用できます。

暗号化を強制する常にSSLを使用します。サーバーがSSLをサポートしていない場合は、接続を拒否します。

  Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

SslMode=必須; このオプションは、Connector/NETバージョン6.2.1から使用できます。

于 2012-12-08T15:26:57.340 に答える
1

私は質問を完全には理解していません。MySQL に接続しようとしましたが、なんとか接続できました。しかし、その後停止しました。なんで?

実際、すべてが単純で、インターネットには非常に多くの例があります。

MySQL テーブルからデータを取得しますか? 1 つのバリアントは、IDataReader を使用することです。

  • MySqlCommand を作成する
  • ExecureReader メソッドを実行する
  • IDataReader インスタンスを取得する
  • レコードを 1 つずつ読み取ります。

幸運を!

于 2012-12-08T20:23:59.777 に答える
1
  1. はい、Open() を呼び出して例外が発生しない場合は、使用する準備ができています。SQL を生成し、コマンド オブジェクトを使用してサーバーに送信する必要があります。

  2. 「closeconnection」メソッドでは、新しい接続オブジェクトを作成し、その直後にそれを破棄します。その接続を開くことさえしません。

  3. メソッドではなく、クラス内で接続オブジェクトを宣言する必要があります。これにより、接続オブジェクトを 1 つだけ使用して、コードを実行できるようになります。各メソッドで異なる接続オブジェクトを使用しているため、現在のコードが機能していません。

ただし、データベース接続は高価であり、接続を頻繁に使用しない場合は、おそらく接続を開いてデータベースでジョブを実行し、接続を閉じる必要があります。最初にデータベース接続を開き、アプリケーションの最後まで接続を開いたままにしておくことはお勧めできません。

そして、@PhoenixReborn が述べたように、変数のスコープを研究する必要があると思います。

于 2012-12-08T21:23:56.383 に答える