Announcement

Collapse
No announcement yet.

ADODB-Zugriff aus VB.NET

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ADODB-Zugriff aus VB.NET

    Hallo zusammen,

    ich fluche derzeit über folgendes Szenario und hoffe, jemand hat eine zündende Idee für mich^^

    Ich habe eine Liste von Usern, die ich gerne mit einer Tabelle in einer Database abgleichen möchte, um nur die daraus zu extrahieren, die sowohl in Liste als auch in Table vorhanden sind. Das zu vergleichende Attribut heißt "GID".

    Hier ergeben sich aber zwei Szenerien - zum einen Zugriff auf eine Oracle-DB mit einer entsprechenden Tabelle ([1] läuft, hier zu Illustrationszwecken aufgeführt) und zum anderen Zugriff über eine ADODB.Connection auf LDAP ([2] läuft mal gar nicht :-().

    Oracle-Version [1], läuft, zur Illustration, was ich eigentlich will
    Code:
    Dim memberVariableOracleConnection As OracleConnection
    Dim memberVariableTableName As String
    Dim memberVariableAnzahlSpalten As Integer
    Dim memberVariableSpaltenListe As String
    Dim memberVariableUserArrayList As ArrayList '(hier schon mit Usernamen gefüllt)
    Dim memberVariableSpeichereResultateListe As ArrayList
    
    Private Sub GetUsers()
    
            Dim cmdSchema As String
            Dim cmdIn As OracleCommand
            Dim reader As OracleDataReader
            Dim userName As String
    
            'Select-Statement zum Auslesen des Schema der Oracle-Tabelle
             cmdSchema = "SELECT COLUMN_NAME, COLUMN_ID, DATA_TYPE, DATA_LENGTH FROM ALL_TAB_COLUMNS WHERE TABLE_NAME='" + memberVariableTableName + "' ORDER BY COLUMN_ID"
                    cmdIn = New OracleCommand(cmdSchema, memberVariableOracleConnection)
                    reader = cmdIn.ExecuteReader
    
                    memberVariableAnzahlSpalten = 0
                    memberVariableSpaltenListe = "("
    
                    ' Auslesen der Spaltennamen aus der OracleTabelle
                        If (reader.HasRows) Then
                            While reader.Read
                                    Dim spaltenName As String = reader.GetString(reader.GetOrdinal("COLUMN_NAME"))
                                    memberVariableSpaltenListe += colName + ","
                                    memberVariableAnzahlSpalten += 1
                                    
                            End While
                        End If
    
    
                    'Generierung von Select-Statements - abschliessendes, ueberfluessiges Komma entfernen und String vervollstaendigen
                    memberVariableSpaltenListe = memberVariableSpaltenListe.Remove(memberVariableSpaltenListe.Length - 1, 1)
                    memberVariableSpaltenListe += ")"
    
                    'eigentliche Tabellenabfrage mit den gerade nach dem Schema generierten Statements
                    For i As Integer = 0 To (memberVariableUserArrayList.Count - 1)
                        userName = memberVariableUserArrayList(i).toString()
                        cmdSchema = "SELECT * FROM " + m_memberVariableTableName + " WHERE GID = '" + userName + "'"
                        cmdIn = New OracleCommand(cmdSchema, memberVariableOracleConnection)
                        reader = cmdIn.ExecuteReader
    
    
                        While reader.Read()
                            Dim userValues As String = "("
                            For j As Integer = 0 To memberVariableAnzahlSpalten - 1
                                userValues += "'" + reader.GetValue(j) + "',"
                            Next
                            userValues = userValues.Remove(userValues.Length - 1, 1)
                            userValues += ")"
    
                            memberVariableSpeichereResultateListe.Add(userValues)
                        End While
                    Next
    
    End Sub

    Nun stehe ich aber wie die Ochsin (weiblicher Ochse? egal..^^) vorm Berg, da ich den Abgleich über eine ADODB.Connection anstatt über eine Oracle-Connection machen soll. Soll heißen, ich habe auf einmal keinen DataReader mehr zur Verfügung, ich kann keine SQL-Statements mehr einsetzen und finde eigentlich nur irgendwelche häßlichen Skripting-Beispiele in der Art von

    Code:
     
    Set conLDAP = CreateObject("ADODB.Connection")
    		conLDAP.Provider = "ProviderObject"
    		conLDAP.ConnectionString = "ConnectionString"
    		conLDAP.Open
    
    		stateMent = "<LDAP://hierkoennte.ihrServerSteh.en:395>;" & _
    		"(&(objectClass=person));" & _
    		"gid, givenName, telephoneNumber""
    
    		Set rs = conLDAP.Execute(stateMent)
    So kann ich mir zwar einzelne Personen rausholen - aber ich möchte doch erstmal alle Attribute/Spaltennamen/Eigenschaften haben und dann möchte ich einzeln nach dem GID-Attribut vergleichen - und mir nur die rausholen, die in beiden Listen (der vorher vorhandenen Liste von Usern, identifiziert über GUID und der LDAP-Quelle) vorhanden sind.

    Ich hoffe einfach mal, der Wunsch, eine ADODB.Connection für LDAP direkt aus VB heraus zu nutzenist nicht so ungewöhnlich(?)

    Wie muss ich es in etwa angehen, damit ich das rausbekomme, was ich oben bei dem Oracle-Beispiel durchspiele?

    Liebe, ratlose Grüße

    Steffi

  • #2
    Hallo Steffi,

    wenn ich das jetzt richtig sehe, bekommst du als Ergebnis der Abfrage ein Recordset. Über dieses kannst du doch einfach loopen und deinen Vergleich anstellen:

    [highlight=vb.net]
    While Not rs.EOF
    ' hier deinen Vergleich
    rs.MoveNext
    Wend

    conn.Close
    [/highlight]

    Comment


    • #3
      Ich hoffe einfach mal, der Wunsch, eine ADODB.Connection für LDAP direkt aus VB heraus zu nutzen ist nicht so ungewöhnlich(?)
      Doch. Erstens gibt es den OLDEDBProvider in ADO.NET mit dem man den Zugriff genauso machen könnte und zweitens wieso sollte man ADO für LDAP überhaupt verwenden wenn es doch alles gekapselt in System.DirectoryServices gibt?

      Comment


      • #4
        Hmm... dann ist anscheinend meine Herangehensweise, von der Oracle-Variante auf LDAP zu schließen, verkehrt? Wie würdet ihr vorgehen?

        Comment


        • #5
          Das entscheidende Stichwort hast du bereits "System.DirectoryServices".
          Dazu gibt es jede Menge Beispiel im Netz. Wenn du einen Einstieg über die Onlinehilfe suchst ist die "System.DirectoryServices.DirectoryEntry" Klasse das richtige.

          Wie die Lösung konkret aussieht hängt von Aufbau eures ActiveDirectory oder was auch immer eure LDAP Quelle ist ab. Du solltest dir das mal in der MSDN ansehen, ausprobieren und dann wenn du konkrete Probleme hast nochmal hier nachfragen.

          Comment


          • #6
            Dann stürz ich mich mal ins Gefecht^^

            Danke für eure Hinweise & liebe Grüße

            Steffi

            Comment

            Working...
            X