将C#连接到MySQL并打开连接

时间:2012-11-05 23:14:32

标签: c# mysql c connection mysqlconnection

这是我从MySQL读取内容的简单代码。但是我想要的是在打开Form时创建连接和命令,只需在单击按钮时打开连接并完成剩下的工作。但它说:

  

“当前上下文中不存在名称'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();
        }
    }
}

3 个答案:

答案 0 :(得分: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();
    //...
}

答案 1 :(得分: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();
    }
}

}

答案 2 :(得分: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());
                }
            }
        }
    }
}