2

これは、MySQL から何かを読み取るための単純なコードです。しかし、フォームが開かれたときに接続とコマンドを作成し、ボタンがクリックされたときに接続を開いて残りを実行したいのです。しかし、それは言います:

「「konekcija」という名前は現在のコンテキストには存在しません」

誰か説明してくれませんか。

namespace mysql_windows_console
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public void Form1_Load(object sender, EventArgs e)
        {
            /*========MYSQL KONEKCIJA===========*/
            string baza               = "server=localhost;database=test;user=root;password=;";
            MySqlConnection konekcija = new MySqlConnection(baza);
            MySqlCommand comm         = konekcija.CreateCommand();
            /*========MYSQL KONEKCIJA===========*/
        }

        private void button1_Click(object sender, EventArgs e)
        {
            konekcija.Open();
            string sql               = "SELECT IME,PREZIME FROM tabela";
            MySqlDataAdapter adapter = new MySqlDataAdapter(sql,konekcija);
            DataTable tab            = new DataTable();
            adapter.Fill(tab);
            dataGridView1.DataSource = tab;
            konekcija.Close();
        }
    }
}
4

3 に答える 3

0

konekcija をローカル変数として保存しています。次のようなプロパティにします。

private MySqlConnection konekcija { get; set; }

public void Form1_Load(object sender, EventArgs e)
{
    //...
    this.konekcija = new MySqlConnection(baza);
}

private void button1_click(object sender, EventArgs e)
{
    this.konekcija.Open();
    //...
}
于 2012-11-05T23:18:58.860 に答える
0

他のメソッドからアクセスできるようMySqlConnectionに、EventHandler の外部で宣言する必要があります。また、コンストラクターForm_Loadで初期化することをお勧めします。Formを使用しているためDataAdapter、使用する必要はありませんMySqlCommand。改訂されたコードは次のとおりです。

namespace mysql_windows_console
{
public partial class Form1 : Form
{
    MySqlConnection konekcija;
    string baza = "server=localhost;database=test;user=root;password=;"; //so you can access it again if you need it b any chance
    public Form1()
    {
        InitializeComponent();
        konekcija = new MySqlConnection(baza);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        konekcija.Open();
        string sql = "SELECT IME,PREZIME FROM tabela";
        MySqlDataAdapter adapter = new MySqlDataAdapter(sql,konekcija);
        DataTable tab = new DataTable();
        adapter.Fill(tab);
        dataGridView1.DataSource = tab;
        konekcija.Close();
    }
}

}

于 2012-11-05T23:33:28.417 に答える
0

konekcijaのスコープに が見つからないことを意味するだけですbutton1_Click

変数のスコープを可能な限り最小化します。必要なときだけ接続してみませんか?例、

const string baza = "server=localhost;database=test;user=root;password=;";  
private void button1_Click(object sender, EventArgs e)
{

    using (MySqlConnection _conn = new MySqlConnection(baza))
    {
        using (MySqlCommand _comm = new  MySqlCommand())
        {
            _comm.Connection = _conn;
            _comm.CommandText = "SELECT IME,PREZIME FROM tabela";
            _comm.CommandType = CommandType.Text;

            using (MySqlDataAdapter _adapter = new MySqlDataAdapter(_comm))
            {
                DataTable _table = new DataTable;
                try
                {
                    _adapter.Fill(_table);
                    dataGridView1.DataSource = _table;
                }
                catch (MySqlException e)
                {
                    MessageBox.Show(e.Message.ToString());
                }
            }
        }
    }
}
于 2012-11-06T03:50:36.597 に答える