【问题标题】:Connecting C# to MySQL and opening connection将 C# 连接到 MySQL 并打开连接
【发布时间】:2023-03-27 01:10:02
【问题描述】:

这是我的简单代码,只是为了从 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();
        }
    }
}

【问题讨论】:

  • 这是一个范围问题,在 Form1_Load 中创建的 MySQLConnection 对象 konekcija 是该方法的本地对象,无法在 button1_Click 中访问。您需要将其声明为类本身的属性...
  • @NikolaD-Nick 我不是在嘲笑或取笑。我觉得这很好:)
  • @nawfal 在这种情况下,很抱歉恶意评论。我会抹去的!

标签: c# mysql c connection mysqlconnection


【解决方案1】:

您应该在Form_Load EventHandler 之外声明MySqlConnection,以便您可以从其他方法访问它。另外我建议在 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】:

    您将 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();
        //...
    }
    

    【讨论】:

      【解决方案3】:

      这只是意味着在button1_Click的范围内找不到konekcija

      尽可能缩小变量的范围。为什么不只在需要时才连接?例如,

      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());
                      }
                  }
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2014-07-24
        • 2017-12-06
        • 2020-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-02
        • 1970-01-01
        相关资源
        最近更新 更多