IC # - Я получаю "Соединение открыто" база данных MYSQL - PullRequest
0 голосов
/ 17 января 2019

Я делаю проект по посещению колледжа с Winforms, MySQL и C #. В том, что я хочу получить или добавить «Пользователи». Поэтому я написал код для этого:

public bool GetUser(ref clsConnection c)
    {
        MySqlCommand query = new MySqlCommand();
        query.Connection = SQL;
        query.CommandText = "SELECT ";
        foreach (FieldInfo mi in typeof(clsConnection).GetFields())
        {
            foreach (StatsAttribute a in mi.GetCustomAttributes(typeof(StatsAttribute), false))
            {
                query.CommandText += a.Name + ", ";
            }
        }
        query.CommandText = query.CommandText.Substring(0, query.CommandText.Length - 2);
        query.CommandText += " FROM user WHERE User_Name='" + Escape(c.Username) + "'";
        query.Prepare();
        MySqlDataReader dr = query.ExecuteReader();
        if (dr.HasRows)
        {
            foreach (FieldInfo mi in typeof(clsConnection).GetFields())
            {
                foreach (StatsAttribute a in mi.GetCustomAttributes(typeof(StatsAttribute), false))
                {

                    dr.Read();
                    if (mi.FieldType.Name == "String")
                    {
                        mi.SetValue(c, (object)dr.GetString(a.Name));
                    }
                    else if (mi.FieldType.Name == "Double")
                    {
                        mi.SetValue(c, (object)dr.GetDouble(a.Name));
                    }
                    else if (mi.FieldType.Name == "Int32")
                    {
                        mi.SetValue(c, (object)dr.GetInt32(a.Name));
                    }
                    else if (mi.FieldType.Name == "UInt32")
                    {
                        mi.SetValue(c, (object)dr.GetUInt32(a.Name));
                    }
                    else if (mi.FieldType.Name == "Byte")
                    {
                        mi.SetValue(c, (object)dr.GetByte(a.Name));
                    }
                    else if (mi.FieldType.Name == "Boolean")
                    {
                        mi.SetValue(c, (object)dr.GetBoolean(a.Name));
                    }
                    else if (mi.FieldType.Name == "Date")
                    {
                        mi.SetValue(c, (object)dr.GetDateTime(a.Name));
                    }
                }
            }
        }
        else
        {
            dr.Close();
            return false;
        }
        dr.Close();
        return true;
    }

 public void AddUser(clsConnection c)
    {
        if (c.Username == "")
            return;
        List<string> users = new List<string>();
        List<string> values = new List<string>();
        int i = 0;
        foreach (FieldInfo mi in typeof(clsConnection).GetFields())
        {
            foreach (StatsAttribute a in mi.GetCustomAttributes(typeof(StatsAttribute), false))
            {
                users.Add(a.Name);
                values.Add("'" + mi.GetValue(c) + "'");
                i++;
            }
        }
        string query = "INSERT INTO user(" + string.Join(",", users.ToArray()) + ") VALUES (" + string.Join(",", values.ToArray()) + ");";
        Query(query);
    }

Я получаю сообщение об ошибке «Соединение открыто», когда я пытаюсь подключиться к новой или существующей учетной записи. Я не могу найти, где моя проблема ... Возможно, где-то есть getuser или newuser, я не закрываю программу чтения данных, но не могу найти где, пожалуйста, помогите мне ...

1 Ответ

0 голосов
/ 17 января 2019

Я не уверен, что вы закроете соединение здесь. Попробуйте добавить это после закрытия «MySqlDataReader».

query.Connection.Close();

Также, вы можете увидеть ниже пример;

https://dev.mysql.com/doc/dev/connector-net/8.0/html/M_MySql_Data_MySqlClient_MySqlCommand_ExecuteReader.htm

...