Laden...

Daten aus Exchange mit ADODB auslesen

Erstellt von chanderegg vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.676 Views
C
chanderegg Themenstarter:in
101 Beiträge seit 2008
vor 14 Jahren
Daten aus Exchange mit ADODB auslesen

verwendetes Datenbanksystem: Exchange 2003

Hallo zusammen

Ich habe etwa vor einem Jahr ein Programm geschrieben, welches die Kontaktdaten im Outlook aus einem öffentlichen Ordner in eine Oracle DB speichert. Dies hat einwandfrei funktioniert bis jetzt aber nun habe ich folgendes Problem:
Beim Auslesen der Daten kennt er den Index nicht mehr.

Ich bin wie folgt vorgegangen:
Zuerst die Verbindung herstellen


oCn.Provider = "exoledb.datasource";
oCn.Open(sURL, ExBenutzer, ExPasswort, 0);

funktioniert

dann recordset erstellen


//Definiert den String für die SQL Abfrage
            strSql = "";
            strSql = "select * from scope ('shallow traversal of " + "\"";
            strSql = strSql + sURL + "\"') WHERE \"DAV:ishidden\" = false AND \"DAV:isfolder\" = false";
            strSql = strSql + " ORDER BY \"urn:schemas:contacts:sn\" ";

            //Erstellt Objekte mit den Records
            oRs.Open(strSql, oCn,
                ADODB.CursorTypeEnum.adOpenStatic,
                ADODB.LockTypeEnum.adLockOptimistic, 1);

geht auch und erkennt sogar, dass es einen Eintrag enthält

dann die Daten in ein Objekt schreiben


oFields = oRs.Fields;

                DatenObjekt ExchangeDatenObjekt = new DatenObjekt();

                //Gibt die Anrede aus
                oField = oFields["urn:schemas:contacts:personaltitle"];
                ExchangeDatenObjekt.Anrede = oField.Value.ToString();

                //Gibt den Vornamen aus
                oField = oFields["urn:schemas:contacts:givenName"];
                ExchangeDatenObjekt.Vorname = oField.Value.ToString();

                //Gibt den Nachnamen aus
                oField = oFields["urn:schemas:contacts:sn"];
                ExchangeDatenObjekt.Nachname = oField.Value.ToString();

                //Gibt die Strasse inklusive Hausnummer aus
                oField = oFields["urn:schemas:contacts:mailingstreet"];
                ExchangeDatenObjekt.Adresse = oField.Value.ToString();

                //Gibt die Postleitzahl aus
                oField = oFields["urn:schemas:contacts:mailingpostalcode"];
                ExchangeDatenObjekt.Postleitzahl = oField.Value.ToString();

                //Gibt den Ort aus
                oField = oFields["urn:schemas:contacts:mailingcity"];
                ExchangeDatenObjekt.Ort = oField.Value.ToString();

                //Gibt die Mail-Adresse aus
                oField = oFields["urn:schemas:contacts:email1"];
                ExchangeDatenObjekt.Email = oField.Value.ToString();

                //Gibt die Festnetz-Telephonnummer aus
                oField = oFields["urn:schemas:contacts:telephoneNumber"];
                ExchangeDatenObjekt.Tel = oField.Value.ToString();

                //Gibt die Natelnummer aus
                oField = oFields["urn:schemas:contacts:mobile"];
                ExchangeDatenObjekt.Mobile = oField.Value.ToString();

                //Gibt die Faxnummer aus
                oField = oFields["urn:schemas:contacts:facsimiletelephonenumber"];
                ExchangeDatenObjekt.Fax = oField.Value.ToString();

                //Gibt die Abteilung/Spezifikation aus
                oField = oFields["urn:schemas:contacts:profession"];
                ExchangeDatenObjekt.Abteilung = oField.Value.ToString();

                //Gibt die Firma aus
                oField = oFields["urn:schemas:contacts:o"];
                ExchangeDatenObjekt.Firma = oField.Value.ToString();

                //Gibt das Land aus
                oField = oFields["urn:schemas:contacts:mailingcountry"];
                ExchangeDatenObjekt.Land = oField.Value.ToString();

                //Gibt die URL der Firmenhomepage aus
                oField = oFields["urn:schemas:contacts:businesshomepage"];
                ExchangeDatenObjekt.URL = oField.Value.ToString();

                //Gibt das Erstelldatum aus
                oField = oFields["DAV:creationdate"];
                ExchangeDatenObjekt.Erstelldatum = Convert.ToDateTime(oField.Value);

                return ExchangeDatenObjekt;

Hier gibts nun Probleme, da er den Index nicht erkennt. Ich habe deshalb mal nachgeschaut, was für Indexes so ein Eintrag hat und folgendes Resultat erhalten:
DAV:contentclass: urn:content-classes:person
DAV:isroot:
DAV:defaultdocument:
DAV:getcontenttype: message/rfc822
DAV:lastaccessed:
DAV:resourcetype:
DAV:creationdate: 08.12.2009 16:33:53
DAV:getcontentlanguage:
DAV:ishidden: False
DAV:parentname: http://....
DAV:getcontentlength: 5965
DAV:isstructureddocument: False
http://schemas.microsoft.com/repl/repl-uid: rid:6f96d09eedb6244ca157318e4c0ff76800000011c71e
DAV:displayname: Hans Muster-1072143035.EML
DAV:href: http://...
DAV:isreadonly: False
DAV:getlastmodified: 09.12.2009 14:53:25
DAV:iscollection: False
http://schemas.microsoft.com/repl/resourcetag: rt:6f96d09eedb6244ca157318e4c0ff76800000011c71e6f96d09eedb6244ca157318e4c0ff76800000011c923

Ich frage mich nun wo sind meine Felder hingekommen und wieso hat sich das plötzlich geändert?

ps. Das Programm wird nur alle paar Monate ausgeführt.

Vielen Dank für Eure Hilfe
chanderegg