/// <summary>
        /// Holt ein Element
        /// </summary>
        /// <param name="key">ID/Key des Elements</param>
        /// <returns>Wurde das Element gefunden wird das Object zurückgegebene, ansonsten null</returns>
        internal static Medien GetElement(int key)
        {
            Medien tempObject = null;

            if (!IsKeyEindeutig(key))
            {
                try
                {
                    using (SqlConnection connection = new SqlConnection(connectionString))
                    {
                        connection.Open();
                        using (SqlCommand command = new SqlCommand("SELECT * FROM Medien WHERE Signatur='" + key + "'", connection))
                        {
                            using (SqlDataReader reader = command.ExecuteReader())
                            {
                                while (reader.Read())
                                {
                                    Enum.TryParse(reader.GetString(3), out Medien.TypBezeichnung typ);
                                    Enum.TryParse(reader.GetString(4), out Medien.LeihstatusBezeichnung leihstatus);

                                    if (typ == Medien.TypBezeichnung.Video)
                                    {
                                        Videos video = new Videos(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), typ, leihstatus);
                                        tempObject = video;
                                    }
                                    else if (typ == Medien.TypBezeichnung.Buch)
                                    {
                                        Buecher buch = new Buecher(reader.GetInt32(0), reader.GetString(1), reader.GetString(2), typ, leihstatus);
                                        tempObject = buch;
                                    }
                                }
                            }
                        }
                    }
                }
                catch (SqlException ex)
                {
                    // TODO
                }

                return(tempObject);
            }
            else
            {
                Console.WriteLine("Signatur nicht gefunden!");
                return(null);
            }
        }
        /// <summary>
        /// Daten speichern
        /// </summary>
        /// <param name="key">ID des Elements</param>
        /// <param name="data">Das zu speichernde Datenobjekt</param>
        internal static void AddData(int key, Medien data)
        {
            string tempEigenschaft = "";

            try
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    using (SqlCommand command = new SqlCommand("INSERT INTO Medien VALUES(@Sig,@Titel,@Eigenschaft,@Typ,@Leihstatus)", connection))
                    {
                        if (data is Buecher)
                        {
                            Buecher buch;
                            buch            = data as Buecher;
                            tempEigenschaft = buch.Seitenzahl.ToString();
                        }
                        else if (data is Videos)
                        {
                            Videos video;
                            video           = data as Videos;
                            tempEigenschaft = video.Laufzeit.ToString();
                        }

                        command.Parameters.AddWithValue("@Sig", data.Signatur);
                        command.Parameters.AddWithValue("@Titel", data.Titel);
                        command.Parameters.AddWithValue("@Eigenschaft", tempEigenschaft);
                        command.Parameters.AddWithValue("@Typ", data.Typ.ToString());
                        command.Parameters.AddWithValue("@Leihstatus", data.Leihstatus.ToString());

                        command.ExecuteNonQuery();
                    }
                }
            }
            catch (SqlException ex)
            {
                Console.WriteLine("Fehler beim Datensatz schreiben: " + ex.Message);
            }
        }
        static void Main(string[] args)
        {
            string auswahl    = "";
            int    signatur   = 0;
            Medien tempMedien = null;

            Console.WriteLine("Medienverwaltung");

            while (auswahl != "q")
            {
                Console.WriteLine("\n#### Menue ####");
                Console.WriteLine("Anlegen eines neuen Buch 'b'");
                Console.WriteLine("Anlegen eines neuen Video 'v'");
                Console.WriteLine("Ausgabe der vorhandenen Medien 'l'");
                Console.WriteLine("Entleihen eines Medium 'e Signatur'");
                Console.WriteLine("Rueckgabe eines Medium 'r Signatur'");
                Console.WriteLine("Löschen eines Medium 'd Signatur'");
                Console.WriteLine("Programm beenden 'q'\n");

                auswahl = Console.ReadLine();
                if (auswahl != null && auswahl.Length > 5)
                {
                    string[] temp = auswahl.Split(' ');
                    auswahl  = temp[0];
                    signatur = Convert.ToInt32(temp[1]);
                }

                Console.WriteLine();
                switch (auswahl)
                {
                case "b":
                    new Buecher();
                    break;

                case "v":
                    new Videos();
                    break;

                case "l":
                    // Für die Spaltenüberschrift
                    Medien.List();

                    foreach (Medien medienObj in Data.GetAllElements())
                    {
                        if (medienObj is Buecher)
                        {
                            Buecher buch;
                            buch = medienObj as Buecher;
                            if (buch != null)
                            {
                                buch.List();
                            }
                        }
                        else if (medienObj is Videos)
                        {
                            ((Videos)medienObj).List();
                        }
                    }
                    break;

                case "e":
                    tempMedien = Data.GetElement(signatur);
                    if (tempMedien != null)
                    {
                        tempMedien.Entleihen();
                    }
                    break;

                case "r":
                    tempMedien = Data.GetElement(signatur);
                    if (tempMedien != null)
                    {
                        tempMedien.Rueckgabe();
                    }

                    break;

                case "d":
                    Data.DeleteElement(signatur);
                    break;

                case "q":
                    // "durchrutschen"
                    break;

                default:
                    Console.WriteLine("Falsche Eingabe\n");
                    break;
                }
            }
        }