Zum Inhalt springen

.NETter

Mitglieder
  • Gesamte Inhalte

    177
  • Benutzer seit

  • Letzter Besuch

Alle Inhalte von .NETter

  1. Genau das erschlägst Du mit Databinding und einer Bindingsource. - Checkbox (z.B.) auf die Form ziehen. - CheckBox markieren (in der oberen rechten Ecke erscheint ein kleiner Pfeil) - Hier auswählen --> "An Daten gebunden..." - Im Assistenten dann die richtige Datenbank auswählen etc.
  2. Hallo, du kannst mit Databinding und einr oder mehrere Bindingsources arbeiten. Das läuft auf Datenbindung an ein Control hinaus. Also einfach mal nach den beiden Begriffen googeln. Aber hier gibts auch Videos von MSDN dazu Gruß, Thomas
  3. Hallo, ist die Datenbank reell im SQL Server vorhanden oder willst du sie nur bei Ausführung des Programms dort einhängen. Dies tust Du nämlich mit dem eingestellten Connectionstring. Wenn Du in deinem Projekt eine .mdf Datei als Datenquelle eingebunden hast und diese auch nutzen willst ist das OK. =.\\SQLEXPRESS;AttachDbFilename='db.mdf' Die Fehlermeldung klingt als ob es im SQL Server wirklich eine Datenbank mit dem Namen "DB" gibt und so kann der SQL Server natürlich keine weitere "Attachen" die den gleichen Namen hat. Im SQL Server Express kann man die Datenbank temporär einhängen um dessen Dienste zu nutzen. Wenn die Anwenung beendet wird ist die Datenbank nicht mehr im SQL Server vorhanden. Falls du auf eine bestehende Datenbank zugreifen möchtest, die fest im SQL Server vorhanden ist, müsste dein Connectionstring eher so aussehen: Server=.\\SQLEXPRESS;Database=db;Integrated Security=SSPI; Wenn Du deinem Projekt also eine dienstbasierte Datenbank (*.mdf-Datei) hinzugefügt hast, so ist diese nur wärend der Ausführung deiner Anwendung für Deine Anwendung erreichbar. Hoffe das hilft Dir weiter! Gruß, Thomas
  4. Hallo! eine kleine Erweiterung zum .sdf File. Zur Ausführung wird im Ausführungsverzeichnis die System.Data.SqlServerCe.dll benötigt, oder eine Installation des eines SQL Server CE. Sonst hagelt es Exceptions. Bei der Erstellung eines Setupprojekts (hinzufügen der primären Ausgabe) wird dies automatisch erkannt und die DLL in das entsprechende Verzeichnis kopiert. Aber ansonsten ist dies wirklich eine gute Lösung. Nicht jeder möchte einen SQL Server Express lokal installiert haben, obwohl dieser total unschädlich und auch unbelastend fürs System ist wenn man ihn richtig konfiguriert. Gruß, Thomas
  5. Hallo! Ich habe hier eine etwas andere Idee zur Lösung deines Problems. Und zwar die Nutzung vom Reports im Visual Studio. Du bettest ein ReportViewer-Control in deine Form ein. Diesem weist Du dann einen neuen Report (.rdlc) zu. Der Assistent begleitet dich durch die ganze Prozedur inkl. Datenquellen etc. Im Report selbst hast die Möglichkeit Tabellen mit Daten auszugeben oder aber auch gewünschte Diagramme auf den Report zu ziehen (Balken, Kreis usw.) Im endeffekt würde die Lösung ungefähr so aussehen: Den Mittelwert kannst Du in einem Textfeld berechnen. Hier ist auch noch ein Link den du mal zu dem Thema anschauen könntest: Erstellen von Client-Berichtsdefinitionsdateien (RDLC) Gruß, Thomas
  6. Hallo, kann es sein, dass die .mdb Datei bei jedem Erstellen (auch bei F5) wieder in das Ausgabeverzeichnis kopiert wird? Ein gern und oft gemachter Fehler :-) Erstelle das Projekt und starte es direkt im bin\Debug Pfad mit der exe-Datei. Füge dann mal einen datensatz hinzu und schließe deine Anwendung wieder. Dann prüfe die Access-Datei direkt mit Access. Ist dort der Datensatz enthalten? Wenn ja, wird die bestehende DB bei jedem Erstellen wieder neu ins Ausgabeverzeichnis kopiert. Falls Du das umstellen möchtest markiere in deinem Projekt das mdf.-File und sieh dir eigenschaften an. Dort gibt es die Einstellung: "In Ausgabeverzeichnis kopieren" dort solltest du dann auf "nicht kopieren" oder "nur wenn neuer" umstellen solange Du testest. Gruß, Thomas
  7. .NETter

    SQL Handbuch

    Hallo, erstmal das Wichtigste! <-- findest Du beim Erstellen der Nachricht auf der rechten Seite im Menü Smileys Ne, jetzt im Ernst... Ich habe gesehen, dass Du Joins mit einem "," trennst. Dein SQL: select distinct forenames, surname from employee JOIN empcourse ON (employee.empno = empcourse.empno), course JOIN empcourse ON (course.courseno = empcourse.courseno) where cname LIKE '%Accounting%' order by (surname) Mein SQL: select DISTINCT(surname), forenames from employee inner join empcourse on employee.empno = empcourse.empno inner join course on empcourse.courseno = course.courseno WHERE course.cname LIKE '%Accounting%'; Auch mehrere Joins werden ohne Komma hintereinander geschrieben. Wenn man jetzt vom einfachen Join (INNER JOIN) ausgeht, so werden aus beiden abgefragten Tabellen die Zeilen zurück gegeben die ein Gegenstück in der zweiten Tabelle besitzen. Beispiel: Tabelle: Mitarbeiter Felder: maid (PK), vorname, nachname, abtid Tabelle: Abteilung Felder: abtid (PK), abtname Daten der Tabelle Mitarbeiter: 1; Max; Mustermann; 2; 2; Bill; Gates; 1; 3; Peter; Meier; 2; Daten der Tabelle Abteilung: 2; Abteilung2; 3; Abteilung3; Also mal einen INNER JOIN: select Mitarbeiter.*, Abteilung.* from Mitarbeiter inner join Abteilung ON Mitarbeiter.abtid = Abteilung.abtid; Als Ergebnis würdest Du ungefähr folgendes erhalten: Max; Mustermann; 2; 2; Abteilung2; Peter; Meier; 2; 2; Abteilung2 Bill Gates taucht nicht auf weil es in der "verjointen" Tabelle Abteilung keine Abteilung mit der Nummer 1 gibt. Ebenso taucht Abteilung 3 nicht auf weil es keinen Mitarbeiter gibt der einen Eintrag für Abteilung 3 besitzt. Jetzt mal eben über drei Tabellen****************************** Die Anforderung hat sich geändert und ein Mitarbeiter muss nun mehreren Abteilungen zugeordnet werden können. Also ändern wir den Aufbau der DB wie folgt: Tabelle: Mitarbeiter Felder: maid (PK), vorname, nachname Tabelle: Abteilung Felder: abtid (PK), abtname Tabelle: Mitarbeiter_Abteilung Felder: maid, abtid So können wir jeden Mitarbeiter beliebig vielen Abteilungen zuordnen. Aber jetzt müssen auch drei Tabellen abgefragt werden um an Daten aus Mitarbeiter und Abteilungen zu kommen. Erster Inner Join: select * from Mitarbeiter inner join Mitarbeiter_Abteilung on Mitarbeiter.maid = Mitarbeiter_Abteilung.maid --Aus diesem Join ergibt sich nun eine Rückgabe (wie oben gesehen) --diese Rückgabe kannst Du einfach mit einer weiteren Tabelle verjoinen :-) inner join Abteilung on Mitarbeiter_Abteilung.abtid = Abteilung.abtid So erhältst Du alle Felder aus den drei Tabellen die einen Bezug zueinander haben. Das Select * ersetzt du dann einfach durch die Felder die du auch benötigst. Hoffe alle Klarheiten beseitigt zu haben :-) Gruß, Thomas
  8. Hallo, das sieht doch im Debugger OK aus. Funktioniert den die Übertragung ins .mdf File??? Bei einem OleDb Command sind die Parameter nicht benannt sondern mit "?" bezeichnet. Hier entscheidet die Reihenfolge in der die Parameter übergeben werden. Falls es nicht klappen sollte bitte mal einen kompletten (oder zumindest relevante Teile) SourceCode-Auszug einstellen. Gruß, Thomas
  9. .NETter

    SQL Handbuch

    Hallo, hier mal die Antwort für die Aufgabe 3.1: select DISTINCT(surname), forenames from employee inner join empcourse on employee.empno = empcourse.empno inner join course on empcourse.courseno = course.courseno WHERE course.cname LIKE '%Accounting%'; Aufgabe 3.3: select DISTINCT(surname), forenames from employee inner join empcourse on employee.empno = empcourse.empno inner join course on empcourse.courseno = course.courseno WHERE (course.cdate >= to_date( '01.01.1988','DD.MM.YYYY')) AND (course.cdate <= to_date( '31.12.1988','DD.MM.YYYY')); und hier auch noch Aufgabe 3.4: select department.dname, employee.surname, employee.forenames , jobhistory.position from employee INNER JOIN department ON employee.depno = department.depno INNER JOIN jobhistory ON employee.empno = jobhistory.empno WHERE jobhistory.enddate IS NULL ORDER BY department.dname, employee.surname, employee.forenames; aber bitte nicht einfach als gegeben hinnehmen sondern mit Joins auseinander setzen :-) Hoffe das hilft Dir weiter :-) gruß, Thomas
  10. .NETter

    SQL Handbuch

    Bei welcher Aufgabe genau? Ich habe das vor Urzeiten mal gemacht, aber vielleicht kann ich helfen. Gruß, Thomas
  11. Hallo, also einen Fehler wird es dort auch nicht geben. Du liest im Mittelteil des Codes Zellwerte aus und weist diese Variablen vom Typ String zu... Aber wo passiert etwas mit dem DataSet? Du führst ein Update für das DataSet aus (.Update(...)). Aber es liegen keine Änderungen vor... Wie sieht denn das Insert-Command des TableAdapters aus? Im Endeffekt sollte es vor dem Update erstmal etwas wie: this.mitarbeiterTableAdapter.Insert("Testname", 1234); geben. Du fügst dem DataSet im Speicher Zeilen hinzu und musst es dann "Updaten" damit es auch in die .mdb übernommen werden kann. this.mitarbeiterTableAdapter.Update(testDBDataSet.Mitarbeiter); Gruß, Thomas Gruß, Thomas
  12. Hallo, die Einstellungen findest Du im Verbindungsmanager (ganz unten im Studio, wenn ein Paket geöffnet ist). Hier stehen alle Verbindungen im aktuellen Paket. Dort kannst Du über das Kontextmenü die Daten ansehen und auch ändern. Gruß, Thomas
  13. Hallo, freut mich, dass es geklappt hat! Nein, hier habe ich mich nicht vertan. User Access Control hat schon seinen Sinn. Wenn ein "normaler" User ein Programm ausführen soll, welches auf Bereiche zugreift, die nicht für seine Berechtigungsstufe zugelassen sind, liegt ein grundlegendes Problem des Anwendungsdesigns vor. Auf c: hat ein normaler User nichts zu suchen (auch nicht über die Ausführung einer Anwendung). Und wenn er nicht ein "normaler" User ist sondern weitergehende Berechtigungen besitzt, kann man das so unter Vista sehr gut mit der UAC lösen. Hat ja auch hier geklappt. Auch wenn die Meldungen zugegeben manchmal nervig sein können. Aber alles andere ist das Umgehen von Sicherheitsrichtlinien. Entsprechende Daten sollten dann vielleicht eher in einem Bereich liegen in dem ein "normaler" ausreichende Berechtigungen besitzt. Das hinterlegen von Benutzernamen und Passwörtern in einer Anwendung ist ein potenzielles Sicherheitsrisiko. Mit dem .Net Reflector auf die EXE und schon habe ich Benutzernamen und Passwort (im schlimmsten Fall für einen Admin-Account). Für eine private Anwendung die nur lokal genutzt wird, ist das vielleicht noch erträglich, aber in einer Anwendung die ich verteilen möchte? Das ist nicht irgendwie abwertend gemeint(!) sondern nur ein gut gemeinter Rat. Gruß, Thomas
  14. Beim SQL Server 2008 sind das "Integration Services (.dtsx)" nicht mehr "Data Transformation Services (.dts)". Mich würde interessieren wieviel datenverkehr dahinter steckt. SSIS ist ja schon eine ziemlich Keule für reine Replikation. Gruß, Thomas
  15. Mit C++ kenne ich mich nicht wirklich aus. Bei einem Projekt in C# kannst Du eine Manifestdatei dem Projekt hinzufügen die den Kontext der Ausführung definiert. Hinzufügen --> Allgemein --> Anwendungsmanifestdatei Darin befindet sich folgender Eintrag welcher drei verschiedene Konfigurationen zulässt: <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> In den Anwendungseinstellungen kannst Du dann im Bereich "Anwendung" im Unterpunkt "Symbol und Manifest" die von Dir hinzugefügte Manifestdatei auswählen. Vielleicht hilft Dir das weiter? Gruß, Thomas
  16. Ich habe das Tutorial ebenfalls mal nachgebaut und es funktioniert nicht :-) Aber mit einer kleinen Änderung bekommt man es doch zum Fliegen. Anstatt: object Dateiname = "normal.dotx"; Gib einfach den Pfad zur Vorlage mit an: object Dateiname = @"c:\Vorlage.dotx"; Bei mir hat es so funktioniert. Gruß, Thomas
  17. Hallo, dies ist schon etwas fortgeschritten, wenn man nicht selbst einen Windowsdienst oder ein wiederholbares Script schreiben will. Hier mal ein HowTo zum Thema Transaktionsreplikation: Transaktionsreplikation HowTo Gruß, Thomas
  18. Hallo, das mit Word ist kein großes Ding. Hier mal ein link für ein kleines Tutorial, was ich zum reinen Einstieg ganz passend finde: Tutorial Hier wird auch wie bei deiner Problemstellung ein Vorlage genutzt. Gruß, Thomas
  19. Ja, über den Reiter Daten. Dort findest Du auch etwas zum SQL Server.
  20. Nein, die Daten werden in keinem Fall unbrauchbar gemacht etc. Das ist ein normales DB-Backup was jeder Admin oder Entwickler regelmäßig ausführen sollte um eine DB im Notfall wieder herstellen zu können. Nach dem Backup hast Du eine Sicherungsdatei (.bak) die Du auf dem gleichen oder einem anderen Server wiederherstellen kannst. Gruß, Thomas
  21. Hallo, kannst einfach ein Backup erstellen und auf dem anderen Server wieder einspielen. Falls Du nur die Struktur (oder Teile davon) etc. übertragen möchtest, benutze das SQL Server Management Studio. Im Unterpunkt Datenbanken einfach Rechtsklick auf die entsprechende Datenbank und dann unter "Tasks" den Punkt "Scripts generieren" auswählen. Der Assistent führt dich durch den weiteren Vorgang. Gruß, Thomas
  22. Hallo, hier gehst Du einen kleinen Umweg über die momentane Position des Mauszeigers und passt das "MouseDown" - Event wie unten stehend an: private void listBox1_MouseDown(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Right) { Point p = new Point(e.X, e.Y); listBox1.SelectedIndex = listBox1.IndexFromPoint(p); } } Gruß, Thomas
  23. .NETter

    Collection in Collection

    Hallo! Nur nochmal zusammengefasst... SmallColelction wird befüllt und dann BigCollection hinzugefügt. Danach befüllst Du SmallCollection neu. Dies ändert die in BigCollection enthaltene SmallCollection. Hab ich das so weit richtig verstanden? Wenn ja: Natürlich ändert sich SmallCollection auch wenn es sich in BigCollection befindet. Du hast über den Namen SmallCollection eine Referenz darauf! Du müsstest eine "neue" Collection zu BigCollection hinzufügen. Wie oben beschrieben änderst Du nur immer wieder die gleiche Collection. Dein Code: MsgBox(BigCollection(1)(1)) 'Zeigt Fehler (Collection ist leer) Dies wirft einen Fehler weil die Collection (SmallCollection) vorhanden aber leer ist. Somit ist die zweite Indexangabe "OutOfRange". Wenn Du die SmallCollection nicht "Clearst" sondern mit neuen Werten belegst und dann die SmallCollection "erneut" hinzufügst, wird eine neue Instanz von SmallColelction erstellt und die bereits in BigCollection vorhandene SmallCollection bleibt unverändert. Hier mal als Konsolenanwendung (allerdings C#): using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; namespace _CollInCollTest { class Program { static void Main(string[] args) { Collection<string> smallCollection = new Collection<string>(); Collection<Collection<string>> bigCollection = new Collection<Collection<string>>(); smallCollection.Add("Eintrag1"); Console.WriteLine(string.Format("Anzahl Elemente in SmallCollection: {0}", smallCollection.Count.ToString())); Console.WriteLine("SmallCollection wird BigCollection hinzugefügt"); bigCollection.Add(smallCollection); Console.WriteLine("SmallCollection.Clear()"); smallCollection.Clear(); Console.WriteLine(string.Format("Anzahl Elemente in SmallCollection: {0}", smallCollection.Count.ToString())); Console.WriteLine(string.Format("Anzahl Elemente in BigCollection: {0}", bigCollection.Count.ToString())); Console.WriteLine("Erstelle neuen Eintrag für SmallCollection"); smallCollection.Add("Eintrag1"); Console.WriteLine(string.Format("Anzahl Elemente in SmallCollection: {0}", smallCollection.Count.ToString())); Console.WriteLine("Füge SmallCollection erneut BigCollection hinzu"); bigCollection.Add(smallCollection); Console.WriteLine(string.Format("Anzahl Elemente in SmallCollection: {0}", smallCollection.Count.ToString())); Console.WriteLine(string.Format("Anzahl Elemente in BigCollection: {0}", bigCollection.Count.ToString())); Console.ReadKey(); } } } Trotz alledem würde mich interessieren was für Daten Du damit sammelst. Könnte mir vorstellen, dass man das auch anders lösen könnte. Viele Grüße, Thomas
  24. .NETter

    Process Tree beenden

    Hallo, ja genau. hier werden nur Windowsdienste angegeben. Ich schließe mich der vorherigen frage nach der Art der Anwendung an. Einen Prozess zu terminieren sollte nicht die Regel sein sondern eher eine Notlösung. Beim Beenden eines Prozesses über den Taskmanager erhält man ja schon eine Warnung welche auf Systeminstabilität hinweist. Also was willst Du mit diesem Vorgang bezwecken? Windowsdienste zu starten, anzuhalten oder zu beenden ist manchmal ganz nützlich, aber wirklich alle Prozesse? Und warum kein Win32? Gruß, Thomas
  25. .NETter

    Process Tree beenden

    Hallo, Dir steht im .Net Framework auch der Namensraum System.ServiceProcess zur Verfügung. Hier könntest Du einen ServiceController nutzen welcher Dir abhängige Dienste und Dienste von denen dieser Prozess abhängt anzeigt. Ich habe im Code mal eine sehr simples Beispiel anhand eines TreeView erstellt. Dies ist wie gesagt nur ein Beispiel und legt keinen Wert auf Codequlität! private void Form1_Load(object sender, EventArgs e) { ServiceController[] controllers = ServiceController.GetServices("Dein Rechnername"); foreach (ServiceController sc in controllers) { TreeNode tn = new TreeNode(sc.DisplayName); TreeNode parent = new TreeNode("Parents"); foreach (ServiceController p in sc.ServicesDependedOn) { parent.Nodes.Add(p.DisplayName); } tn.Nodes.Add(parent); TreeNode child = new TreeNode("Childs"); foreach (ServiceController c in sc.DependentServices) { child.Nodes.Add(c.DisplayName); } tn.Nodes.Add(child); treeViewProzesse.Nodes.Add(tn); } } Die TreeView wird mit allen "Dienste" gefüllt. In den Unterordnern werden Childs und Parents angezeigt. Wenn Du hier etwas Fleiß reinsteckst wirst Du bald eine Möglichkeit finden diesen Tree nach Abhängigkeiten zu sortieren und damit dein Problem zu lösen. Viele Grüße, Thomas

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...