Hallo, ich habe vor einem Monat ein Datentool testweise an ein System ageschlossen, um die Zustände zu sehen.
Diese Daten werden in einer MongoDB gespeichert.
Nun würde ich gerne die Daten ode Tabellen der MongoDB auslesen oder analysieren.
Ich habe dann mal gegoogelt, was es für C# so gibt, und bin bei folgendem hängen geblieben (NuGet): MongoDb.Driver V2.18.0
Habe dann mal fogendes probiert:
// Replace the uri string with your MongoDB deployment's connection string.
var client = new MongoClient("mongodb+srv://<username>:<password>@<cluster-address>/test?w=majority");
var database = client.GetDatabase("test");
Hier mal mein Beispiel, wie ich das mache:
MongoClient cMongoClient = new MongoClient("mongodb://USERNAME:PASSWORD@IPADRESS/DATENBANKNAME?w=majority");
var database = client.GetDatabase("DATENBANKNAME");
Wenn ich nun weiter gehe und die Namen der Tabellen ausgeben möchte, tritt ein Fehler auf
//// .... hier kommt dann Fehler
var testDatabases = cMongoClient.ListDatabaseNames().ToList();
Ist da bei der Anmeldelogik etwas falsch im Aufbau?
[Hinweis] Wie poste ich richtig? Punkt 6 sollte mittlerweile bekannt sein.
Das sollte keine lästige Pflicht sein, sondern den potentiellen Helfern das Helfen erleichten, damit du eine passende Antwort bekommst -- also schon aus Eigeninteresse sollten Beiträge und v.a. Code formatiert werden.
Hallo oehrle,
tritt ein Fehler auf
Du bist ja nicht erst seit Kurzem beim Forum dabei und wohl auch als Entwickler tätig. Daher solltest du auch wissen dass "ein Fehler" eine sehr exakte Beschreibung vom Problem ist, bei der sich jeder sofort auskennt und zielgerichtet eine hilfreiche Antwort verfassen kann. Oder auch nicht...
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Du bekommst mit ListDatabaseNames nicht die Tabellen sondern die Datenbanken.
Laut Doku sollte es hier auch keine Exception geben, was auf einen Fehler wie z.B. Verbindungs- oder Rechteprobleme hinweist.
Doku:
MongoClient.ListDatabaseNames Method (CancellationToken)
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Diese MEldung kommt nach dem Aufruf von:
//// .... hier kommt dann Fehler
var testDatabases = cMongoClient.ListDatabaseNames().ToList();
Fehlermeldung:
System.TimeoutException: "A timeout occurred after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector{ AllowedLatencyRange = 00:00:00.0150000 }, OperationsCountServerSelector }. Client view of cluster state is { ClusterId : "1", Type : "Unknown", State : "Disconnected", Servers : [{ ServerId: "{ ClusterId : 1, EndPoint : "10.38.143.27:27017" }", EndPoint: "10.38.143.27:27017", ReasonChanged: "Heartbeat", State: "Disconnected", ServerVersion: , TopologyVersion: , Type: "Unknown", HeartbeatException: "MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server.
---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (10060): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 10.38.143.27:27017
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
at MongoDB.Driver.Core.Connections.TcpStreamFactory.Connect(Socket socket, EndPoint endPoint, CancellationToken cancellationToken)
at MongoDB.Driver.Core.Connections.TcpStreamFactory.CreateStream(EndPoint endPoint, CancellationToken cancellationToken)
at MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelper(CancellationToken cancellationToken)
--- End of inner exception stack trace ---
at MongoDB.Driver.Core.Connections.BinaryConnection.OpenHelper(CancellationToken cancellationToken)
at MongoDB.Driver.Core.Connections.BinaryConnection.Open(CancellationToken cancellationToken)
at MongoDB.Driver.Core.Servers.ServerMonitor.InitializeConnection(CancellationToken cancellationToken)
at MongoDB.Driver.Core.Servers.ServerMonitor.Heartbeat(CancellationToken cancellationToken)", LastHeartbeatTimestamp: "2023-01-10T09:02:09.0192194Z", LastUpdateTimestamp: "2023-01-10T09:02:09.0192200Z" }] }."
Erneut der Hinweis zu [Hinweis] Wie poste ich richtig? Punkt 6.
Hallo oehrle,
hast du dir die Fehlermeldung auch durchgelesen? V.a. die InnerException
? Hier nochmal der Einfachheithalber:
A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond. 10.38.143.27:27017
Ist also die DB erreichbar? Firewall, etc. gestattet den Zugriff? Kann z.B. via Robomongo auf die DB zugegriffen werden usw.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Die Fehlermeldung sagt doch schon alles.
Du kannst mit deinen Daten keine Verbindung zum Server herstellen, hier knallt es sogar direkt bei Socket.
Wenn hier ggf. eine Firewall zwischen dir und dem Server liegt, scheint diese die Verbindung zu blocken.
Kann auch lokale Firewall des Servers oder Clients sein.
Nachtrag:
gfoidl war schneller 🙂
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Hallo, es war der falsche Port in der Firewall, so ein Schitt.
Aber jetzt bekomme ich die Verbindung, und die ListDataBaseNames().
Nun muss ich mal sehen wie ich da die Daten raus bekomme, probiere erst mal ...
Oder ganz einfach in die Doku schauen oder auf der Seite von MongoDB.Driver einen Schnelleinstieg anschauen, wo dies schon gezeigt wird.
Link:
Quick Tour
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Hallo, ich wollte erst mal alle Collections erfassen, aber da wird auch eine Exceptin geworfen, das muss mit der Userberechtigung zu tun haben.
Erst mal nichts desto trotz, ich habe in der Doku von dem Tool Angaben zu verschiedenen Entities gefunden, und mal eine ausprobiert, soweit klappt das.
#if true
//// Geht noch ... Verbinden mit Datenbank
var database = cMongoClient.GetDatabase("MTLINKi");
//// Bekannte Collection erfassen
var collection = database.GetCollection<BsonDocument>("Program_History");
#endif
Meine weitere Frage, wie kann ich denn dann durch diese collection iterieren, ich würde diese gerne als DataTable in einem DataGrid darstellen.
Dahinter verbirgt sich JSON, ist das korrekt?
Ist das mit den Code-Tags tatsächlich so schwer?
hast du dich überhaupt mal mit MongoDB beschöftigt oder machst du nur Trial and Error?
MongoDB ist eine Dokumenten Datenbank (NoSQL).
Du arbeitest hier nur mit Json, musst also die Daten per De-/Serialisierung zwischen deinem Code und JS konvertieren.
Die Doku samt Quick Tour hast du, damit kannst du im Grunde alles machen.
Ansonsten solltest du von DataTable die Finger lassen.
Du kannst hier mit Data Binding arbeiten und direkt die richtige DataSource mitgeben.
Ist alles dokumentiert, musst du nur lesen und umsetzen.
MongoDB
https://www.mongodb.com/docs/manual/core/document/
Nachtrag:
Nutzt bitte, wie schon zwei mal per Kommentar Edit empfohlen, auch die Code Tags.
Dein Code lässt sich sonst sehr schlecht lesen, was kaum zu mehr Hilfe motiviert wenn man lieblos den Code ohne Formatierung postet.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Ja T-Virus, wie so oft. man wird ins kalte Wasser geworfen und soll schnell damit umgehen und was rausholen können.
Was die Sache mit der MongoDB angeht, ich bin da Frischling, ich muss mich damit beschäftigen. Ich muss aus einem System die Daten auswerten, diese sind in einer MongoDB enthalten, aber es gibt von diesen Daten auch Endpoints (REST), die ich auch abgreifen kann (oder schon mache).
Jetzt muss ich mich damit erst mal zurechtifinden (Umgang / Aufbau), habe auch schon gesehen das in den Endpoints Daten fehlen, aber ich denke diese entstehen alle aus den Daten der MongoDB. Ich muss mich nun mal vortasten ...