Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

CSharp - Queries an MSSQL DB in einer rekursiven Funktion

Mitglied: Cubic83

Cubic83 (Level 2) - Jetzt verbinden

08.12.2011 um 16:22 Uhr, 2890 Aufrufe, 6 Kommentare

Hallo,

ich habe mal wieder ein kleines Problem. Ich habe auf unserem MSSQL Server eine DB mit einer Tabelle. Diese Tabelle stellt eine Ordnerstruktur mit Referenz auf sich selbst dar.

01.
[folder] 
02.
idfolder (int) 
03.
fitopfolder (int) 
04.
dtname
Wie kriege ich das nun richtig mit c# ausgelesen? Mein aktueller code lautet:

01.
 
02.
private void GetSubFolders(String folderid) { 
03.
  SqlCommand SelectCommand = new SqlCommand("SELECT idfolder, dtname FROM folder WHERE fitopfolder='" + folderid.ToString() + "' ORDER BY dtname ASC", sqlconnection); 
04.
  SqlDataReader reader = SelectCommand.ExecuteReader(); 
05.
   while (reader.Read()) 
06.
07.
           GetSubFolders(Convert.ToString(reader.GetValue(0)); 
08.
09.
    reader.Close(); 
10.
11.
 
Ich kriege die Exception (steht auch so in der Doku) dass reader zunächst geschlossen sein muss bevor er erneut benutzt werden kann. Wie muss ich meine Funktion jetzt aufbauen? Google jetzt schon fast den ganzen Nachmittag ohne dass ich etwas gefunden habe. Das ist das erste Mal dass ich mit c# auf einen Datenbank Server zugreife und finde das leider alles etwas verwirrend.


Vielen Dank
Mitglied: vorstieg
08.12.2011 um 16:50 Uhr
Hi

Speicher doch die Daten in einer List und schließ den reader bevor du sie Funktion erneut aufrufst.

Gruß
Bitte warten ..
Mitglied: 32067
08.12.2011 um 17:13 Uhr
Zitat von vorstieg:
Hi
> Speicher doch die Daten in einer List und schließ den reader bevor du sie Funktion erneut aufrufst.
Gruß

Würde ich auch so machen.

Dann hast du auch immer nur eine aktive DB-Verbindung und nicht mehrere, in Abhängigkeit von deiner Schachtelungstiefe.
Bitte warten ..
Mitglied: Cubic83
09.12.2011 um 07:23 Uhr
Hallo,

wie sehe dann der Code dazu aus?

Wenn ich den Reader.close in die Schleife nehme, dann funktionniert ja das reader.read() nicht mehr?

01.
 
02.
private void GetSubFolders(String folderid) { 
03.
  SqlCommand SelectCommand = new SqlCommand("SELECT idfolder, dtname FROM folder WHERE fitopfolder='" + folderid.ToString() + "' ORDER BY dtname ASC", sqlconnection); 
04.
  SqlDataReader reader = SelectCommand.ExecuteReader(); 
05.
   while (reader.Read()) 
06.
07.
           String myValue = Convert.ToString(reader.GetValue(0); 
08.
           reader.Close(); 
09.
           GetSubFolders(myValue); 
10.
11.
 
12.
13.
 
Oder verstehe ich das falsch?

mfG
Bitte warten ..
Mitglied: vorstieg
09.12.2011 um 10:23 Uhr
Ja, eine List vor der while Schleife erstellen und in der while: List.Add(reader.Value) //Achtung nur Pseudocode

danach(nach der while) mit foreach() die List durchlaufen

Aber generell musst du die abgerufenen Daten ja irgendwo ablegen, oder? Deine Funktion hat nur void als Rückgabewert.
Bitte warten ..
Mitglied: Cubic83
09.12.2011 um 14:31 Uhr
Danke, das funktionniert jetzt auch soweit. Aber ich brech mir einen ab mit der Funktion. Eigentlich will ich einen TreeView mit den Daten füllen.

01.
 
02.
private void GetSubFolders(String folderid) { 
03.
   try 
04.
05.
      SqlCommand SelectCommand = new SqlCommand("SELECT idfolder, dtname FROM folder WHERE fitopfolder='" + folderid.ToString() + "' ORDER BY dtname ASC", sqlconnection); 
06.
      SqlDataReader reader = SelectCommand.ExecuteReader(); 
07.
      if (reader.HasRows) 
08.
09.
 
10.
         List<String> myList = new List<String>(); 
11.
 
12.
         while (reader.Read()) 
13.
14.
            TreeNode newNode = new TreeNode(); 
15.
            newNode.Text = Convert.ToString(reader.GetValue(1)); 
16.
            newNode.Tag = reader.GetValue(0); 
17.
            newNode.SelectedImageIndex = '0'; 
18.
 
19.
            myList.Add(Convert.ToString(reader.GetValue(0))); 
20.
 
21.
            myTreeNode.Add(newNode);   
22.
                         
23.
24.
         reader.Close(); 
25.
                     
26.
         for (int i = 0; i < myList.Count; i++) 
27.
28.
             GetSubFolders(myList[i]); 
29.
30.
                     
31.
32.
    	if (!reader.IsClosed) 
33.
34.
         reader.Close(); 
35.
36.
37.
   catch (Exception err) 
38.
39.
      MessageBox.Show(err.ToString()); 
40.
41.
42.
 
Wie muss ich das aufbauen, damit mit das Treeview (mytree ist das TreeView auf dem Form) recursiv aufgebaut wird? Normalerweis würde ich das jetzt ausprobieren bis es klappt, aber hier bin ich langsam am Verzweifeln. Wäre auch cool, wenn ich vorm Wochenende noch was aufzuweisen hätte ;)

Vielen Dank,
Bitte warten ..
Mitglied: vorstieg
09.12.2011 um 15:23 Uhr
schau dir mal http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx an, das hilft dir vielleicht weiter.
Mit TreeViews hab ich selber nicht gearbeitet.

Gruß
Bitte warten ..
Ähnliche Inhalte
Datenbanken
Index reorg einer MSSQL DB
Frage von Thor01Datenbanken1 Kommentar

Hallo zusammen, kann mir einer erklären wie ich ein REORG einer MSSQL DB mache?

Visual Studio

Unterbruch rekursiver Funktion durch Blacklist (C-Sharp)

gelöst Frage von clragonVisual Studio4 Kommentare

Hallo liebe Mit-Forum-Administratoren! Ich bin auf ein pikantes Problem gestoßen dessen Lösung sich mir nicht von alleine erschließen will. ...

PHP

Umstrukturierung eines Arrays anhand einer rekursiven Funktion umstrukturieren

gelöst Frage von joekerPHP5 Kommentare

Hallo, ich u.a. folgende Arrays in einer (ziemlich flachen) Hierarchie: Array1: Array( 4042 => Array ( level2 => 10 ...

Windows Server

SCCM Queries Reporting Tasksequenz

Frage von Tuborg85Windows Server2 Kommentare

Hallo Forengemeine, ich würde gerne eine Querie bzw. ein Report erstellen der mir am Ende der Tasksequenz bzw. nach ...

Neue Wissensbeiträge
Humor (lol)

WhatsApp-Nachrichten endlich auch per Bluetooth versendbar

Information von BassFishFox vor 3 StundenHumor (lol)1 Kommentar

Genau darauf habe ich gewartet! ;-) Der beliebte Messaging-Dienst WhatsApp erhält eine praktische neue Funktion: Ab dem nächsten Update ...

Google Android

Googles "Android Enterprise Recommended" für Unternehmen

Information von kgborn vor 15 StundenGoogle Android3 Kommentare

Hier eine Information, die für Administratoren und Verantwortliche in Unternehmen, die für die Beschaffung und das Rollout von Android-Geräten ...

Sicherheit

Intel gibt neue Spectre V2-Microcode-Updates frei (20.02.2018)

Information von kgborn vor 16 StundenSicherheit

Intel hat zum 20. Februar 2018 weitere Microcode-Updates für OEMs freigegeben, um Systeme mit neueren Prozessoren gegen die Spectre ...

Microsoft
ARD-Doku - Das Microsoft Dilemma
Tipp von Knorkator vor 19 StundenMicrosoft3 Kommentare

Hallo zusammen, vor einigen Tagen lief in der ARD u.a. Reportage. Das Youtube Video dazu dürfte länger verfügbar sein. ...

Heiß diskutierte Inhalte
Windows Server
AD DS findet Domäne nicht, behebbar?
Frage von schapitzWindows Server40 Kommentare

Guten Tag, ich habe bei einem Kunden ein Problem mit den AD DS. Umgebung ist folgende: Windows Server 2016 ...

Router & Routing
LANCOM VPN CLIENT einrichten
Frage von Finchen961988Router & Routing27 Kommentare

Hallo, ich habe ein Problem und hoffe ihr könnt mir helfen, wir haben einen Kunden der hat einen Speedport ...

Router & Routing
ISC DHCP 2 Subnetze
gelöst Frage von janosch12Router & Routing19 Kommentare

Hallo, ich betreibe bei mir im Netzwerk einen ISC DHCP Server auf Debian, der DHCP verwaltet aktuell ein /24 ...

Switche und Hubs
Cisco SG350X-48 AdminIP in anderes VLAN
Frage von lcer00Switche und Hubs14 Kommentare

Hallo zusammen, ich habe ein Problem mir einem Cisco SG350X-48 bei der Erstinstallation wurde eine IP 192.168.0.254 (Default VLAN ...