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....
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.
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....
Hallo,
ersetze mal Database=master mit Initial Catalog=master.
glandorf
Hilfreich finde ich immer den ConnectionStringBuilder des entsprechenden ADO.NET Provider und deren Eigenschaften, um zu sehen was der erstellt
Hier wohl SqlConnectionStringBuilder.
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:
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 |
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.
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 |
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....
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 |
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....
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 |
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....