Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Połączenie C# Mysql musi być prawidłowe i otwarte

Problem polega na tym, że nie przechowujesz połączenia, które zostało zwrócone z własności fabryki. Ale nie używaj właściwości jak metody. Zamiast tego użyj go w ten sposób:

using (var con = Services.conn)
{
    Services.conn.Open();
    Services.DB_Select("..a short select statement..", con ));
    //Services.conn.Close(); unnecessary with using
}

Użyj więc tego samego połączenia w użyciu, które zostało zwrócone z właściwości (lub lepiej utworzonego w użyciu) i przekaż je do metody, która go używa. Nawiasem mówiąc, używanie właściwości jako metody fabrycznej nie jest najlepszą praktyką.

Ale moim zdaniem dużo lepiej jest tworzyć połączenie tam, gdzie go używasz, najlepiej w using oświadczenie. I wrzuć con właściwości do kosza na śmieci, jest bezcelowe i jest źródłem paskudnych błędów.

public static void DB_Select(string s, params List<string>[] lists)
{
    try
    {
         using(var conn = new MySqlConnection(Services.ServerConnection))
         {
            conn.Open();
            MySqlCommand cmd = conn.CreateCommand();
            cmd.CommandText = s;
            using( var sqlreader = cmd.ExecuteReader())
            while (sqlreader.Read())
            {
                if (sqlreader[0].ToString().Length > 0)
                {
                    for (int i = 0; i < lists.Count(); i++)
                    {
                        lists[i].Add(sqlreader[i].ToString());
                    }
                }
                else
                {
                    foreach (List<string> save in lists)
                    {
                        save.Add("/");
                    }
                }
            } // unnecessary to close the connection
        }     // or the reader with the using-stetement
    }
    catch (Exception ex)
    {
        MessageBox.Show("Error while selecting data from database!\nDetails: " + ex);
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kłopotliwy błąd Ruby/MySQL:nieprawidłowy pakiet:niezgodność numeru sekwencji

  2. Docker:Połącz wiele obrazów

  3. Usługa Apache Olinge OData zgłasza wyjątek EdmSimpleTypeException, gdy kolumna w bazie danych jest typu TEXT lub BLOB

  4. Zapytanie zwracające jeden dodatkowy rekord. Jakieś porady, jak usunąć go z wyników zapytania?

  5. Jak umieścić jedną kolumnę wyników mysql_query w tablicy?