如何正确打开mysql连接?

628mspwn  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(260)

我正在用mysql在c#asp.net中做一个项目。我试图打开一个mysql连接正确。同时正确关闭/处理此连接。因为它有时会出错
“mysql错误:系统缺少足够的缓冲区空间,或者因为队列已满。”
无论如何,我决定使用“使用”方法,我目前的连接方法这样;

MySqlConnection baglanti = new MySqlConnection(ConfigurationManager.ConnectionStrings["mysqlbaglanti"].ToString());

void GirisYap()
{
    using (var cn = baglanti)
    {
        cn.Open();
        using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM kullanicilar WHERE kullaniciadi='" + txtKullaniciAdi.Text + "' AND sifre='" + txtSifre.Text + "'"))
        {
            using (MySqlDataReader oku = cmd.ExecuteReader())
            {
                if (oku.Read())
                {
                    Session.Add("AdSoyad", oku["AdSoyad"]);
                    Session.Add("sesid", oku["kullaniciid"]);
                    Response.Redirect("AnaSayfa.aspx");
                }
                else
                {
                    lblDurum.Text = "Yanlış Kullanıcı Adı/Şifre !";
                }
            }
        }
    } 
}

但它给出了一个错误“连接必须是有效的和开放的”,我做错了什么?

lyfkaqu1

lyfkaqu11#

using 你应该创建新的 IDisposible 对象。当您使用scope退出时,它将被释放。
在代码中,在类对象构造期间生成连接。首次使用后 cn ,您的 baglanti 对象将被释放。首次使用后,无法打开连接。因此,您应该在using语句中生成连接对象。
以上都是建议,不是解决问题的办法。您的问题是,command对象没有connection对象。您可以通过构造函数将connectin对象传递给command对象
你应该像这样使用:

string connectionStr = ConfigurationManager.ConnectionStrings["mysqlbaglanti"].ToString());

void GirisYap()
{
    using (var cn = new new MySqlConnection(connectionStr))
    {
        cn.Open();
        // command object should take connection object
        using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM kullanicilar WHERE kullaniciadi='" + txtKullaniciAdi.Text + "' AND sifre='" + txtSifre.Text + "'", cn))
        {
            ........
        }
}

相关问题