Laden...

DB-Verbindung schlägt fehl

Erstellt von Platoon vor 3 Jahren Letzter Beitrag vor 3 Jahren 589 Views
P
Platoon Themenstarter:in
57 Beiträge seit 2017
vor 3 Jahren
DB-Verbindung schlägt fehl

Verwendetes Datenbanksystem: <MSSQL>

Hallo zusammen,

hoffe, dass die Rubrik richtig gewählt ist....

Ich stehe gerade vor einem kleinen Problem wo ich nicht mehr weiter weis.

Ich erstelle gerade eine .NET 5 Konsolenanwendung wo ich versuche eine DB-Connection zu einem SQL Server herzustellen. Soweit, so schön. Normalerweise bekomme ich die Connection zu dem SQL Server auch hin aber diesmal beisse ich mir die Zähne aus.

Der Rechner bzw. der MAC kann ohne Probleme mit DBVisualiser und dem jDTS Treiber auf die entsprechende Datenbankinstanz zugreifen. Verwende ich den JDBC Treiber von Microsoft geht das nicht. Ebenso bekomme ich von meiner Anwendung aus keinen Zugriff auf die DB.

Fehler - wie sollte es auch anders sein:

Fehlermeldung:
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: TCP Provider, error: 40 - Could not open a connection to SQL Server) at Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) at Microsoft.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at Microsoft.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean withFailover, SqlAuthenticationMethod authType) at Microsoft.Data.SqlClient.SqlInterna…

Ports sind freigegeben - sowohl für das Profil Domain als auch Private. Ausschalten der Firewall bringt leider auch nichts.

Connectionstring sieht wie folgt aus: @"SERVER=SERVERNAME\INSTANCE;DATABASE=master;USER=USERNAME;PASSWORD=PWD;"

Ich weiß, dass der DBVisualizer schon mal andere Connectionstrings baut - wenn man z.B. Windows Authentication auswählt, kann man das so bauen, dass die Domain trotzdem mit reingenommen wird.....

Aber wo jetzt genau das Problem liegt kann ich nicht sagen. TCP/IP ist aktiviert und die richtige IP ist auch entsprechend hinterlegt.

Also kann man sagen: 🤔 schwirrt mir über dem Kopf und das seit gestern. Hat jemand einen Rat?

.....an unhandled exception is the first way to think about your pattern of programming....
.....nur weil ich nicht weiß was dort passiert, bedeutet es nicht, dass ich nicht weiß, wie man es lösen kann - aber das ist wahrscheinlich....

T
2.219 Beiträge seit 2008
vor 3 Jahren

Sicher das der ConnectionString richtig ist?
Und was meinst du mit JDBC Treiber?
Bei C# arbeitest du mit ADO .NET und nicht JDBC.

Link:
ConnectionStrings SQL Server 2019

Anstelle von User versuch mal User Id, dann könnte es klappen.
Am besten kannst du solche Probleme auch mit einem einfachen Test Programm prüfen ob dein Code und ConnectionString passt.
Bitte zeig auch mal deinen Code, vielleicht sieht man dann noch eine Ursache.

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.

P
Platoon Themenstarter:in
57 Beiträge seit 2017
vor 3 Jahren

Hi,

DBVisualizer nutzt mehrere Treiber - entweder JDBC oder jTDS.
Ich frage mich halt was der jTDS anders macht als der JDBC und ob ich da grundlegend was übersehe oder ob es da ein Leck gibt....wäre ja auch Sicherheitstechnisch relevant.

Dass wir beim .NET Framework im Standard mit dem ADO.NET arbeiten ist mir schon klar - aber das Fehlerbild ist das Gleiche.

Mit User ID habe ich es schon versucht. Das ging auch nicht.


    public static bool DatabaseExists(string DBName)
        {
            SqlConnection connection = new SqlConnection(@"Server=SERVER\INSTANCE;Database=master;User=USERNAME;Password=PWD;");
            try
            {
                SqlCommand command = new SqlCommand("SELECT name FROM master.dbo.sysdatabases WHERE('[' + name + ']' = @dbname OR name = @dbname)", connection);
                command.Parameters.AddWithValue("@dbname", DBName);
                connection.Open();
                result = command.ExecuteNonQuery();
                return true;
            }
            catch(Exception ex)
            {
                Console.WriteLine(result);
                return false;
            }
        }

Der Code ist nicht optimal - aber der wird erst optimiert, wenn der Fehler behoben ist 😉

.....an unhandled exception is the first way to think about your pattern of programming....
.....nur weil ich nicht weiß was dort passiert, bedeutet es nicht, dass ich nicht weiß, wie man es lösen kann - aber das ist wahrscheinlich....

87 Beiträge seit 2016
vor 3 Jahren

Hallo,

ersetze mal Database=master mit Initial Catalog=master.

glandorf

D
152 Beiträge seit 2013
vor 3 Jahren

Hilfreich finde ich immer den ConnectionStringBuilder des entsprechenden ADO.NET Provider und deren Eigenschaften, um zu sehen was der erstellt
Hier wohl SqlConnectionStringBuilder.

2.298 Beiträge seit 2010
vor 3 Jahren

ersetze mal Database=master mit Initial Catalog=master.

Das sollte normalerweise zu einem anderen Fehler führen. Der Fehler den Platoon da beschreibt tritt dann doch eher schon beim Verbindungsaufbau zur Instanz auf.

Mögliche mir bekannte Ursachen wären:

  • Datenbankserver ist vom PC auf dem die Anwendung läuft nicht erreichbar [möglicherweise anderes Netzwerk]
  • Portfreigaben fehlen
  • Instanzname ist fehlerhaft

Die zu verwendende Datenbank wird ja ohnehin erst im nächsten Schritt verwendet, wenn eine Verbindung grundsätzlich schon mal zustande kam.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

463 Beiträge seit 2009
vor 3 Jahren

Hat der User überhaupt Zugriff auf die master Datenbank? Versuche doch doch mal mit diesem User per SQL Server Management Studio anzumelden und prfüe ob du Zugriff auf die master Datenbank hast.

Übrigens sollten Systemdatenbanken tabu sein es gibt eigentlich keinen Grund darauf direkt zuzugreifen.

2.298 Beiträge seit 2010
vor 3 Jahren

Hat der User überhaupt Zugriff auf die master Datenbank? Versuche doch doch mal mit diesem User per SQL Server Management Studio anzumelden und prfüe ob du Zugriff auf die master Datenbank hast.

Übrigens sollten Systemdatenbanken tabu sein es gibt eigentlich keinen Grund darauf direkt zuzugreifen.

Auch wenn deine Einwände korrekt sind gehe ich immer noch davon aus, dass derartige Sachen nicht zu dem genannten Fehler führen.

Für fehlende Berechtigungen auf eine bestimmte Datenbank wird der SQL-Server und die Client-Bibliothek andere Exceptions. Beispielsweise:

Fehlermeldung:
cannot open database masterrequested by the login. the login failed

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

P
Platoon Themenstarter:in
57 Beiträge seit 2017
vor 3 Jahren

Danke für die Antworten.

Das ich auf die Master gehe hat erstmal seinen Grund und wird später noch geändert.

Der Benutzer hat natürlich die Berechtigungen - das ist der sa --> auch das wird noch geändert. Es geht mir gerade in dem Projekt erstmal um einen allgemeinen Versuch.

Ich bin der Sache etwas näher gekommen. Mit dem Microsoft.Data.SqlClient kann ich keine Verbindung aufbauen, mit dem System.Data.SqlClient geht es hingegen.

Da bin ich noch nicht dahinter gestiegen woran es liegt - wenn ich die KonsolenApp auf dem Rechner Debugge wo der SQL Server läuft, dann funktioniert es mit beiden Varianten. Versuche ich es über VS for Mac bekomme ich genannten Fehler.

Ich schaue gleich mal nach, ob es mit einer anderen Windows Maschine geht.
Wenn das auch funktioniert schmeiße ich mal WireShark an und schaue was da wohin gesendet wird.

Ports sind entsprechend geöffnet - der Rechner ist auch erreichbar. Ich kann ja von dem Mac mit DBVisualizer auch auf den Server zugreifen.

.....an unhandled exception is the first way to think about your pattern of programming....
.....nur weil ich nicht weiß was dort passiert, bedeutet es nicht, dass ich nicht weiß, wie man es lösen kann - aber das ist wahrscheinlich....

2.298 Beiträge seit 2010
vor 3 Jahren

Gibt es denn Gründe, warum du den Microsoft.Data.SqlClient nimmst statt den System.SqlClient? Vorallem, wenns mit dem System Provider geht.

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

P
Platoon Themenstarter:in
57 Beiträge seit 2017
vor 3 Jahren

Neee da gibt's keinen Grund für 🙂.

Aber es wäre trotzdem nett zu wissen, warum es nicht funktioniert. Vor allem weil es ja bei Windows funktioniert und bei Mac nicht. Könnte jetzt noch auf einer Linuxmaschine schauen ob es da geht. Eventuell ein Problem auf Seiten Mac OS Big Sur oder bei dem Provider an sich.

.....an unhandled exception is the first way to think about your pattern of programming....
.....nur weil ich nicht weiß was dort passiert, bedeutet es nicht, dass ich nicht weiß, wie man es lösen kann - aber das ist wahrscheinlich....

2.298 Beiträge seit 2010
vor 3 Jahren

Hast es denn mal auf einem Windows Rechner probiert?

Finde leider auch nur Beiträge, wo Leute nach dem Update auf Version 2 der Microsoft Datenprovider Fehler hatten. - Möglicherweise liegts daran? Hast du mal eine ältere Version des Packages probiert?

Wissen ist nicht alles. Man muss es auch anwenden können.

PS Fritz!Box API - TR-064 Schnittstelle | PS EventLogManager |

P
Platoon Themenstarter:in
57 Beiträge seit 2017
vor 3 Jahren

Muss erst noch eine VM aufsetzen um das mal gegen zu prüfen. Mir war gerade noch was dazwischen gekommen.

Ich setzt jetzt gerade die VM auf und dann teste ich das nochmal. Mach am besten direkt 2 - einmal mit Visual Studio, einmal ohne.

Wenn es mit der neuen Version zu tun hat, sollte man das vllt. melden 🙂.

.....an unhandled exception is the first way to think about your pattern of programming....
.....nur weil ich nicht weiß was dort passiert, bedeutet es nicht, dass ich nicht weiß, wie man es lösen kann - aber das ist wahrscheinlich....