-1

mysql データベースに接続しようとしていますが、資格情報 (ユーザー名、パスワード、データベース名など) はすべて私の知る限り正しいものです。接続が既に開かれているというエラーを表示する coonection.open() ステートメントで行き詰まりました。

他のサイトでヘルプを検索しましたが、バグとして報告されています... http://support.microsoft.com/kb/823401

私が出会った代替ソリューションを探しているときに

   using ( connection = MySqlConnection(connectionString))

私はそれを進めることができませんでした。それについての助けは本当にありがたいです。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MySql.Data.MySqlClient;
using System.Windows.Forms;

namespace HotelManagement
{
class DBConnect
{
    private MySqlConnection connection;
    private string server;
    private string database;
    private string uid;
    private string password;

    //constructor
    public DBConnect()
    {
        Initialize();
    }

    private void Initialize()
    {
        server = "localhost";
        database = "hm";
        uid = "root";
        password = "password";
        string connectionString;
        connectionString = "SERVER=" + server + ";" + "DATABASE=" + database + ";" +    "UID=" + uid + ";" + "PASSWORD=" + password + ";";

        connection = new MySqlConnection(connectionString);
    }

    public bool openConnection()
    {
        try
        {
            connection.Open();  //*SHOWS ERROR InvalidOperationUnhandled: Conection already open*
            return true;

        }
        catch (MySqlException e)
        {
            //error 0: Cannot Connect to the server
            switch (e.Number)
            {
                case 0: MessageBox.Show("Cannot Connect to the server");
                    break;
                case 1045: MessageBox.Show("invalid username/password");
                    break;
            }
            return false;
        }
    }

    public bool closeConnection()
    {
        try
        {
            connection.Close();
            return true;
        }
        catch (MySqlException e)
        {
            MessageBox.Show(e.Message);
            return false;
        }
    }

    public void insert()
    {
        string query = "insert into test (i) values (10)";
        if (this.openConnection() == true)
        {
            //creating command and connections
            MySqlCommand cmd = new MySqlCommand(query, connection);
            cmd.ExecuteNonQuery();
            this.closeConnection();
        }
    }

    }

}
4

1 に答える 1

5

接続を閉じる必要があります。接続を閉じていません (おそらく最初のデバッグ後)。

使用できます

connection.Close();

ベスト プラクティス:

処理の最後に管理されていないオブジェクトを確実に消去するために、ブロックを使用することをお勧めします

using(var connection = new MySqlConnection(...))
{
  ...
}
于 2012-10-09T18:34:44.643 に答える