【问题标题】:how to open mysql connection correctly?如何正确打开mysql连接?
【发布时间】:2018-05-20 10:19:10
【问题描述】:

我正在使用 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 !";
                }
            }
        }
    } 
}

但它给出了“连接必须有效且打开”的错误。我做错了什么?

【问题讨论】:

  • 您永远不会将连接分配给命令。使用new MySqlCommand("sql string...", cn);。然后重构使用参数来避免sql注入和语法错误。
  • 不确定该表有多少字段,但考虑将 * 替换为 adsoyad, kullaniciid 以减少发送给您的字节数。
  • 谢谢@Crowcoder 的回答

标签: c# mysql asp.net


【解决方案1】:

using 中,您应该创建新的IDisposible 对象。当您使用范围退出时,它将被释放。

在您的代码中,您在类对象构造期间生成连接。首次使用cn 后,您的baglanti 对象将被释放。首次使用后,无法打开连接。因此,您应该在 using 语句中生成连接对象。

以上所有内容都是建议,而不是解决您的问题。您的问题是,命令对象没有连接对象。您可以通过构造函数将连接对象传递给命令对象

你应该像这样使用:

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))
        {
            ........
        }
}

【讨论】:

  • 好吧,我必须添加 cn.Open();反正。如果我不这样做,它就不起作用。
  • 是的。创建MySqlConnection 对象后,您应该打开与cn.Open() 的连接。然后将连接对象赋予命令对象。
猜你喜欢
  • 2014-06-26
  • 1970-01-01
  • 2021-09-01
  • 2018-02-14
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-24
相关资源
最近更新 更多