Verbindungsproblem mit STM32 und MS-SQL Server

OP #7563757
Lesenswert?

Hallo,

in meinem momentanen Projekt, versuche ich mit einem STM32 Mikrocontroller über TCP/IP eine Verbindung mit einem MS-SQL Server aufzubauen. Für die Netzwerkverbindung nutze ich ein W5500 Modul. Soweit funktioniert die TCP/IP Verbindung. Diese habe ich mit dem Programm Hercules getestet. Jedoch beim Senden des Connection-Strings zur Datenbank habe ich noch Probleme.

Ich sende folgenden Connection String: Server=IP-Adress,Port;Database=myDataBase;User Id=myUsername;Password=myPassword;

Beim testen mit Hercules habe ich auch exakt diesen String zurückbekommen.

Portfreigabe habe ich auch schon gemacht.

Wenn jetzt diesen Connection String zu meinem Server sende, bekomme ich keine Antwort. Über Mikrosoft Management Studio habe ich überprüft ob ein Client sich angemeldet hat (der Client hat sich nicht verbunden) und ich überprüfe ob ich eine Rückmeldung vom Server bekomme (Auch hier keine Rückmeldung).

Kann mir hier jemand sagen was ich hier Möglicherweise übersehe?

#7563797
Lesenswert?

Hast Du Deinen Test mit "hercules" von einem separaten Computer aus durchgeführt, oder lief das lokal auf dem Computer, auf dem der SQL-Server läuft?

Hast Du Dir die Firewall des Computers angesehen, auf dem der SQL-Server läuft?

Kannst Du andere Netzwerkkommunikation von Deinem STM32 zum Windows-Rechner ausführen?

Passen die vergebenen IP-Adressen und Subnetmasken zusammen?

Wenn Dein "hercules" auf einem separaten Computer läuft, lass' mal Wireshark auf dem Computer mit dem SQL-Server laufen und sieh Dir die Kommunikation damit an. Dann wiederhole Deinen Test mit Deinem STM32; die gesendeten Netzwerkpakete müssten wenigstens im Wireshark zu sehen sein.

OP #7563832
Lesenswert?

Harald K. schrieb:

Hast Du Deinen Test mit "hercules" von einem separaten Computer aus durchgeführt, oder lief das lokal auf dem Computer, auf dem der SQL-Server läuft?

Das Programm "Hercules" läuft auf dem gleichen Rechner wie der MS-SQL Server. Ich nutze das gleiche Netzwerk. Der einzige Unterschied ist der eingestellte Port. Diesen ändere ich jeweils wenn ich mit "Hercules" teste oder mit der Datenbank.

Hast Du Dir die Firewall des Computers angesehen, auf dem der SQL-Server läuft?

Ja das habe ich und habe den jeweiligen Port freigegeben. Das konnte ich dann auch testen, da ich eine Socket Verbindung vorher aufbaue. Heißt ich erstelle ein Socket und verbinde mich mit der IP und dem Port. Ist die Verbindung in Ordnung, dann sende ich erst den Connection String. Jeweils mit Hercules als auch mit dem SQL-Server funktioniert das Verbinden auf IP und Port einwandfrei.

Kannst Du andere Netzwerkkommunikation von Deinem STM32 zum Windows-Rechner ausführen

An sich schon ich habe auf jeden Fall auf den STM32 einen Ping Befehl ausgeführt. Wenn du ein besseren Vorschlag hast bin ich hier offen und versuche das natürlich.

Passen die vergebenen IP-Adressen und Subnetmasken zusammen?

Ja, da ich habe mit "Heidi-SQL" mit der IP und dem Port schon mich verbinden können und Subnetzmaske muss ja stimmen sonst könnt ich den Connection String nicht an Hercules senden.

Wenn Dein "hercules" auf einem separaten Computer läuft, lass' mal Wireshark auf dem Computer mit dem SQL-Server laufen und sieh Dir die Kommunikation damit an. Dann wiederhole Deinen Test mit Deinem STM32; die gesendeten Netzwerkpakete müssten wenigstens im Wireshark zu sehen sein.

Ich habe das mal gemacht und sehe auf jeden Fall das Paket was zum SQL-Server geschickt wurde. Ich habe mal ein Bild gemacht. Vielleicht hilft das weiter.

Angehängte Dateien:
#7563837
Lesenswert?

Sebastian K. schrieb:

Ich sende folgenden Connection String: Server=IP-Adress,Port;Database=myDataBase;User Id=myUsername;Password=myPassword;

Sicher dass das so über TCP laufen muss? Liest sich für mich eher wie ein Konfigurations-String für eine SQL-Client-Library.

Edit: Jep. Das ist die Konfiguration für einen .NET SQL-Client. Den hast du sicher nicht auf deinem STM oder W5500.

https://learn.microsoft.com/en-us/openspecs/sql_server_protocols/ms-sccstr/f57903e4-18af-4281-aa9e-9b2198bde494

Angehängte Dateien:
#7563877
Lesenswert?

Ich kenn das Protokoll, was MS-SQL über TCP spricht, nicht wirklich. Über den Link oben findest du aber evtl. weiteres.

Einfache Lösung wäre: Du lässt auf dem Rechner mit dem MS-SQL-Server noch einen kleinen Webservice mitlaufen, der die Daten vom STM32 entgegennimmt und in die Datenbank einträgt. Für beides (Webservice mit MSSQL und HTTP über WZ5500) gibt es haufenweise Beispiele.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren