Przydatna klasa mysql

0

Cześć z braku laku ostatnio napisałem dość wygodną klasę do MySQL z metodą select przekazującą wyniki do DataGridView. To idzie do mojego pierwszego poważniejszego programu, był bym wdzięczny za jakieś wskazówki lub poprawki.

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Text;
using MySql.Data.MySqlClient;

namespace commander
{
    class mysql
    {
        MySqlConnection connection;
        public mysql(string serwer, string baza, string user, string haslo)
        {
            string MyConString = "SERVER="+serwer+";" +
                "DATABASE="+baza+";" +
                "UID="+user+";" +
                "PASSWORD="+haslo+";";
              connection = new MySqlConnection(MyConString);
       
        
        }
        public void select(string query, ListBox lista)
        {
            MySqlCommand command = connection.CreateCommand();
            MySqlDataReader Reader;
            command.CommandText = query;
            connection.Open();
            Reader = command.ExecuteReader();
            while (Reader.Read())
            {
                string thisrow = "";
                for (int i = 0; i < Reader.FieldCount; i++)
                    thisrow += Reader.GetValue(i).ToString() + ",";
                lista.Items.Add(thisrow);
            }
            connection.Close();
        }
        public void select(string query, DataGridView tabela, string kolumny)
        {
            string[] k1 = kolumny.Split(' ');
            tabela.ColumnCount = k1.Count();
            int j=0;
            foreach (string k2 in k1)
            {
                tabela.Columns[j].Name = k2;
                j++;
            }
            MySqlCommand command = connection.CreateCommand();
            MySqlDataReader Reader;
            command.CommandText = query;
            connection.Open();
            Reader = command.ExecuteReader();
            
            
            while (Reader.Read())
            {               
               string[] row= new string[Reader.FieldCount];
               int k = 0;
                for (int i = 0; i < Reader.FieldCount; i++)
                {
                 
                 row[k]= Reader.GetValue(i).ToString();                
                 k++;
                }
                tabela.Rows.Add(row);
            }
            connection.Close();
        }
        public void insert(string query)
        {
            MySqlCommand command = connection.CreateCommand();
            command.CommandText = query;
            connection.Open();
            command.ExecuteNonQuery();
            connection.Close();

        }

    }
}

Przykład zastosowania:
mysql b1 = new mysql("localhost", "baza", "root", "haslo");
b1.select("Select * from artykul",dataGridView1, "id kategoria tytul tekst data_dodania autor"); // Kolumny do tabelki oddzielone spacjami.
Klasa działa, ale w momencie wklejania kodu zauważyłem, że nie mam obsługi błędów, czyli pierwsza poprawka gotowa.

0

Według mnie jedna z ważniejszych wskazówek to pula połączeń dla aplikacji.
Widzę, że za każdym razem otwierasz połączenie i zamykasz...
nie warto wyposażyć klasę w mechanizm utrzymujący połączenie przygotowane do działania z bazą danych?

0
Bert1223 napisał(a):

Według mnie jedna z ważniejszych wskazówek to pula połączeń dla aplikacji.
Widzę, że za każdym razem otwierasz połączenie i zamykasz...
nie warto wyposażyć klasę w mechanizm utrzymujący połączenie przygotowane do działania z bazą danych?

Nie ma takiej potrzeby, connection pooling się tym zajmuje.

A co do klasy, to osobiście wolę jak klasa do komunikacji z bazą zajmuje się tylko komunikacją. Zamieniłbym

public void select(string query, DataGridView tabela, string kolumny)

na

public DataTable select(string query);

Operacje na DataGridView przeniósłbym w inne miejsce.

0

był bym wdzięczny za jakieś wskazówki
Kompatybilność z LINQ. Tak żeby można było używać LINQ-owych zapytań.
Zamiast własnego select() trzeba dziedziczyć po odpowiednim interfejsie, i przeciążyć linqowy Select().

1 użytkowników online, w tym zalogowanych: 0, gości: 1