Generowanie liczby nowych kolumn w zależności od różnicy dat

0

Witam,
Chciałbym zrobić program do sprawdzania obecności. Wpisuje datę rozpoczęcia, datę zakończenia - na tej podstawie obliczam ilość dni pomiędzy datami i tyle kolumn tworzę w MySql'u. Taki jest plan, natomiast realizacja...

W tem sposób obliczam różnice dni:

private void dateTimePicker_End_Date_ValueChanged(object sender, EventArgs e)
        {
            DateTime Start = dateTimePicker_Start_Date.Value.Date;
            DateTime End = dateTimePicker_End_Date.Value.Date;
            TimeSpan TS = End - Start;
            int Days = TS.Days;
            label_Display_Days.Text = Days.ToString();
        }

W ten sposób generuję listę dni pomiędzy dwoma datami i wyświetlam ją w listBoxie

 private void button1_Click(object sender, EventArgs e)
        {
            DateTime dt1 = dateTimePicker_Start_Date.Value;
            DateTime dt2 = dateTimePicker_End_Date.Value;
        
            if (dt1 == dt2) {MessageBox.Show("Wrong Date !");}
            else if (dt1 > dt2){MessageBox.Show("Wrong Date !");}
            else
            {
                listBox1.Items.Clear();
                listBox1.Items.Add(dt1);
                while (dt1 < dt2)
                {
                    dt1 = dt1.AddDays(1);
                    listBox1.Items.Add(dt1);
                }
            }

        }

Tak tworzę nową tabelę w MySql

static public void save_make_new_table_after(string New_Project_Name_textbox)
{
    try
    {
        if (connection.State == ConnectionState.Closed)
            connection.Open();
        string NewTableColumns = "ID INT NOT NULL AUTO_INCREMENT, First_Name VARCHAR(15) NOT NULL, Last_Name VARCHAR(15) NOT NULL,";
        MySqlCommand Create_table = new MySqlCommand(@"CREATE TABLE " + New_Project_Name_textbox + " (" + NewTableColumns + " PRIMARY KEY (id)) COLLATE='utf8_general_ci' ENGINE=InnoDB;", connection);
        Create_table.ExecuteNonQuery();
    }
    catch (MySqlException exception)
    {
        MessageBox.Show(exception.ToString());
    }
    finally
    {
        connection.Close();
    }
}

Czy ktoś zna sposób aby na podstawie działania, lub listy którą wyświetalm obecnie w ListBoxie utworzyć dokładnie tyle kolumn w tabeli MySQL nazwanych dniami dni pomiędzy datą Start i datą Stop?

3
  1. błędny masz plan
  2. tworzysz tabelę z polami data i obecność
  3. zamiast kolumn dodajesz rekordy
  4. samo wyświetlanie to już zależy od frontu a nie od bazy
2

To trochę z **** podejście trzymanie tak danych. To już jak chcesz tak zrobić jak robisz to trzymaj daty w rekordach i na koniec zrób dynamicznego PIVOT'a z tych danych do wyświetlania.

Edit: Ooo spóźniłem się ;)

0

W takim razie w jaki sposób dodać do tabeli w MySqlu tyle i takich rekordów ile wyjdzie mi z różnicy moich dwóch dat? Jak to fizycznie zrobić, czy ktoś może podrzucić kod bo stoję w miejscu.... :(

1

ale po co?
Masz tabelkę obecności z polami data i user_id. Jak user jest obecny to dodajesz wpis do tabeli z datą i jego id. Na tej podstawie wiesz kiedy był. Przez analogie wiesz kiedy nie był (jak nie ma wpisu na dany dzień). Cała reszta to pokazanie tego tak jak chcesz ale to robota dla warstwy prezentacji danych a nie dla bazy. Pytanie jak i w czym piszesz front do bazy

0

W Visual Studio. Bardziej interesuje mnie jak wplesć w kod C# kod SQL żeby to działało.

1

ale co Ci nie działa? Piszesz bardzo lakonicznie, trzeba z Ciebie wyciągać każdą informację. Skup się i napisz KONKRETNIE z czym masz problem. Chociaż masz jakąś wizję jak ma wyglądać prezentacja tych danych? wybrałeś kontrolkę, która Ci to tak wyświetli? potrafisz chociaż pobrać JAKIEKOLWIEK dane z bazy?

0

Nie mam problemu z pobraniem i prezentacją danych z bazy. Nie potrafię wyeksportować (przesłać do MySql) tych danych, czyli - zrobic tak żeby MySql utworzył mi tyle rekordów ile mam wyników i twstawił w te rekordy konkretne daty.

0

Tworzysz tabele z kolumnami: ID, First_Name, Last_Name do której kolumny chcesz wstawić te daty?

Bo sytucja jest prosta iterujesz elementy listy:
https://stackoverflow.com/questions/1538817/looping-through-all-items-in-listbox

I robisz inserta do tabeli dla każdego elementu:

https://stackoverflow.com/questions/16167924/c-sharp-with-mysql-insert-parameters

lub budujesz jednego inserta, który to doda jednym zapytaniem:

https://stackoverflow.com/questions/25323560/most-efficient-way-to-insert-rows-into-mysql-database

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.