/// <summary> /// Aktualisiert einen Eintrag oder fügt einen neuen hinzu /// </summary> /// <param name="entry">Der zu speichernde Eintrag</param> /// <param name="adding">Angabe, ob ein neuer hinzugefügt werden soll oder nicht</param> public static void UpdateEntry(SqliteConnectionManager connectionManager, RdpFolderStructureEntry entry, bool adding = false) { //Prüfen, dass nix null ist if (connectionManager == null) { throw new ArgumentNullException(nameof(connectionManager)); } if (entry == null) { throw new ArgumentNullException(nameof(entry)); } string sqlc = ""; //Der SQL-Befehl, der ausgeführt werden soll if (adding) //Es soll ein Insert-Befehl ausgeführt werden { //Befehl erstellen sqlc += "insert into " + TABLE_CONNECTIONS + " (ParentId, Name, Type, Bemerkung"; if (entry.Type == 0) { sqlc += ", Hostname, Username, Password"; } sqlc += ") values (" + entry.ParentId.ToString() + ", '" + entry.Caption + "', " + entry.Type.ToString() + ", '" + entry.Bemerkung + "'"; if (entry.Type == 0) { RdpFolderStructureRdpEntry t_rdpentry = (RdpFolderStructureRdpEntry)entry; sqlc += ", '" + t_rdpentry.HostName + "', '" + t_rdpentry.UserName + "', '" + t_rdpentry.Password + "'"; } sqlc += ");"; } else //Es soll ein Update-Befehl ausgeführt werden { //Befehl erstellen sqlc += "update " + TABLE_CONNECTIONS + " set ParentId=" + entry.ParentId.ToString() + ", Name='" + entry.Caption + "', Type=" + entry.Type.ToString(); sqlc += ", Bemerkung='" + entry.Bemerkung + "'"; if (entry.Type == 0) { RdpFolderStructureRdpEntry t_rdpentry = (RdpFolderStructureRdpEntry)entry; sqlc += ", Hostname='" + t_rdpentry.HostName + "', Username='******', Password='******'"; } sqlc += " where Id=" + entry.Id.ToString() + ";"; } //Befehl ausführen connectionManager.ExecuteSql(sqlc); //Befehl ausführen //Wenn es ein Add-Vorgang war, dann soll dem Eintrag noch die Id gegeben werden /*if (adding) * { * /*SqliteDataReader t_r = connectionManager.GetSqlResult("Select Max(Id) as MaxId from " + TABLE_CONNECTIONS); * if (t_r.HasRows) //Nur wenn Zeilen vorhanden sind, bringt das ganze was * { * t_r.Read(); * entry.Id = Convert.ToInt32(t_r["MaxId"]); * } * else * entry.Id = -1; //Damit das Programm damit einen Fehler feststellt * }*/ }
/// <summary> /// Gibt eine Liste aller Einträge zurück /// </summary> /// <param name="connectionManager">Der ConnectionManager für die Datenbankverbindung</param> /// <returns></returns> public static List <RdpFolderStructureEntry> GetEntries(SqliteConnectionManager connectionManager) { //Wenn Parameter null ist, direkt eine ArgumentNullException zurückgeben if (connectionManager == null) { throw new ArgumentNullException(nameof(connectionManager)); } //Die Daten per DataReader herunterladen SqliteDataReader reader = connectionManager.GetSqlResult("Select * from " + TABLE_CONNECTIONS + " order by Name"); //Mit einer If prüfen, ob Rows im Reader erhalten sind. Wenn nicht, direkt zum Ende der Methode gehen if (reader.HasRows) { //Die einzelnen Zeilen lesen und in eine Liste eintragen List <RdpFolderStructureEntry> t_lentries = new List <RdpFolderStructureEntry>(); //Liste wird erstellt while (reader.Read()) //Solange noch Zeilen existieren, weiterlesen { //Mit einer If-Abfrage anhand des Typs arbeiten if (Convert.ToInt32(reader["Type"]) == 0) { //Daten speichern RdpFolderStructureRdpEntry entry = new RdpFolderStructureRdpEntry(); entry.Id = Convert.ToInt32(reader["Id"]); entry.ParentId = Convert.ToInt32(reader["ParentId"]); entry.Caption = reader["Name"].ToString(); entry.Type = Convert.ToInt32(reader["Type"]); entry.Bemerkung = reader["Bemerkung"].ToString(); entry.HostName = reader["Hostname"].ToString(); entry.UserName = reader["Username"].ToString(); entry.Password = reader["Password"].ToString(); entry.PingHost = Convert.ToBoolean(Convert.ToInt32(reader["PingHost"])); //Eintrag der Liste hinzufügen t_lentries.Add(entry); } else if (Convert.ToInt32(reader["Type"]) == 1) { //Daten speichern RdpFolderStructureEntry entry = new RdpFolderStructureEntry(); entry.Id = Convert.ToInt32(reader["Id"]); entry.ParentId = Convert.ToInt32(reader["ParentId"]); entry.Caption = reader["Name"].ToString(); entry.Type = Convert.ToInt32(reader["Type"]); entry.Bemerkung = reader["Bemerkung"].ToString(); //Eintrag der Liste hinzufügen t_lentries.Add(entry); } } //Liste zurückgeben return(t_lentries); } //null zurückgeben return(null); }
/// <summary> /// Event-Methode: /// Erlaubt das Hinzufügen eines neue Eintrags /// </summary> private void btnadd_Click(object sender, EventArgs e) { //Dialog zur Auswahl einer Eintragsoption öffnen dlgrdplistnewelement dlg = new dlgrdplistnewelement(); dlg.ShowDialog(); if (dlg.DialogResultId == 0) { return; //wenn nichts ausgewählt wurde, hier beenden } //Anhand des Ergebnisses weiterarbeiten if (dlg.DialogResultId == 1) //Ein neuer Ordner soll erstellt werden { frmfolderentry frm = new frmfolderentry(); frm.ShowDialog(); if (frm.FolderData != null) //Nur wenn es NICHT leer ist, darf die Methode fortgesetzt werden { //RdpFolderStructureEntry erstellen RdpFolderStructureEntry re = frm.FolderData; re.ParentId = m_actualid; re.Type = 1; //Für Ordner //Eintrag speichern SqliteDataIO.UpdateEntry(m_conmanager, re, true); //Einträge neu laden LoadEntryList(); RefreshList(); } } else if (dlg.DialogResultId == 2) //Ein neuer Eintrag soll erstellt werden { frmremotedesktopentry frm = new frmremotedesktopentry(); //Standard-Konstruktor benutzen frm.ShowDialog(); if (frm.RemoteDesktopData != null) //Nur wenn es NICHT null ist, darf die Methode fortgesetzt werden { //RdpFolderStructureRemoteEntry erstellen RdpFolderStructureRdpEntry re = frm.RemoteDesktopData; re.ParentId = m_actualid; re.Type = 0; //Für RDP-Einträge //Eintrag speichern SqliteDataIO.UpdateEntry(m_conmanager, re, true); //Einträge neu laden LoadEntryList(); RefreshList(); } } }
/// <summary> /// Erstellt eine neue Instanz von frmremotedesktopentry. /// Dieser Konstruktor ist für die Bearbeitung eines bestehenden Eintrags zuständig /// </summary> /// <param name="rdpEntry">Die Daten zur Rdp-Verbindung</param> public frmremotedesktopentry(RdpFolderStructureRdpEntry rdpEntry) { InitializeComponent(); BindEvents(); t_rdp = rdpEntry; //Werte anzeigen txtconnectionname.Text = rdpEntry.Caption; txthostname.Text = rdpEntry.HostName; txtusername.Text = rdpEntry.UserName; txtpassword.Text = rdpEntry.Password; txtbemerkung.Text = rdpEntry.Bemerkung; chpinghost.Checked = rdpEntry.PingHost; //Title anpassen Text = "Verbindung bearbeiten"; }
/// <summary> /// Erstellt eine neue Instanz von RemoteDesktopTabPage /// </summary> /// <param name="rdpData">Die RemoteDesktop-Daten, die für die Anzeige verwendet werden sollen</param> public RemoteDesktopTabPage(RdpFolderStructureRdpEntry rdpEntry) : base(rdpEntry.Caption + " (" + rdpEntry.HostName + ")") { //Das Passwort ist ein optionaler Parameter. Wenn keiner gespeichert wurde, dann soll das Eingabefenster erscheinen //Bei Direktverbindungen wird dieses generell geöffnet, da dort keine Passwörter gespeichert werden können string password = ""; //Wenn kein Passwort übergeben wurde, dann soll das Eingabefenster dazu geöffnet werden if (rdpEntry.Password != "") { password = rdpEntry.Password; } else { //Eingabefenster anzeigen frmenterpassword frmpw = new frmenterpassword(rdpEntry.UserName); frmpw.ShowDialog(); //Wenn es nicht leer ist, frotsetzen if (frmpw.Password != "") { password = frmpw.Password; } else { MessageBox.Show("Es wurde kein Passwort eingegeben! Der Vorgang wird abgebrochen", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Warning); m_dispose = true; return; } } //Fenster wird erstellt und mit Daten gefüttert rdpView = new RemoteDesktopTabPageView(rdpEntry.HostName, rdpEntry.GetUserAndDomain().Value, password, rdpEntry.GetUserAndDomain().Key); rdpView.Dock = DockStyle.Fill; rdpView.TopLevel = false; rdpView.FormBorderStyle = FormBorderStyle.None; //Vorher hinzufügen, damit die Größe stimmt Controls.Add(rdpView); //jetzt Element anzeigen rdpView.Show(); }
/// <summary> /// Event-Methode: /// Ändert die Daten in der Datenbank /// </summary> /// <param name="rdpStructureEntry">Das Objekt mit den Daten</param> public void EntryChanged(RdpFolderStructureEntry rdpStructureEntry) { //Hier wird der SQL-Befehl gespeichert. Es sollen nur die Felder geändert werden, die auch geändert werden können string sql = "update tblConnectionStructure set Name='" + rdpStructureEntry.Caption + "', Bemerkung='" + rdpStructureEntry.Bemerkung + "'"; if (rdpStructureEntry.Type == 0) //Es ist eine Verbindung { RdpFolderStructureRdpEntry re = (RdpFolderStructureRdpEntry)rdpStructureEntry; //Objekt casten, um an die zusätzlichen Felder zu kommen //SQL-Befehl vervollständigen sql += ", Hostname='" + re.HostName + "', Username='******', Password='******', PingHost=" + Convert.ToInt32(re.PingHost).ToString(); } //Ausführung abschliessen sql += " where Id=" + rdpStructureEntry.Id.ToString() + ";"; m_conmanager.ExecuteSql(sql); //Einträge neu laden LoadEntryList(); RefreshList(); }
/// <summary> /// Erstellt eine neue Instanz von RemoteDesktopListItem /// </summary> /// <param name="rdpEntry">Die Daten zur Remote-Desktop-Verbindung</param> public RemoteDesktopListItem(RdpFolderStructureRdpEntry rdpEntry) { InitializeComponent(); m_rdp = rdpEntry; lbconname.Text = m_rdp.Caption; lbip.Text = m_rdp.HostName; //Wenn ein Passwort vergeben wurde, dann soll das ! angezeigt werden if (m_rdp.Password != "") { lbpassword.Visible = true; } else { lbpassword.Visible = false; } //Events anbinden picimagerdp.DoubleClick += Redirect_DoubleClick; lbconname.DoubleClick += Redirect_DoubleClick; lbip.DoubleClick += Redirect_DoubleClick; tsmenuitemconnect.DoubleClick += Redirect_DoubleClick; }