Forum: Mikrocontroller und Digitale Elektronik Verbindungsproblem mit STM32 und MS-SQL Server


von Sebastian K. (hyary)


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?

von Harald K. (kirnbichler)


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.

von Sebastian K. (hyary)


Angehängte Dateien:

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.

von Εrnst B. (ernst)


Angehängte Dateien:

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

: Bearbeitet durch User
von Sebastian K. (hyary)


Lesenswert?

Danke für die Info.
Da ich jetzt nicht wirklich ein absoluter Profi bin in diesem Thema, 
hast du evtl. eine Website, Buch, Kurs, Video oder anderes, damit ich 
mich in dieses Thema einlesen bzw. einarbeiten kann. Auch ein Beispiel 
Code wäre eine große Hilfe für mich.

von Εrnst B. (ernst)


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.

von Harald K. (kirnbichler)


Lesenswert?

Εrnst B. schrieb:
> Einfache Lösung wäre

Das ist so ziemlich die einzige sinnvolle Läsung, denn das Protokoll, 
das der MSSQL-Server über seine native Socketschnittstelle verwendet, 
ist ... aufwendig und komplex.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.