Laden...

Verbindungsprobleme zu MSSQL

Erstellt von cmpxchg vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.004 Views
C
cmpxchg Themenstarter:in
192 Beiträge seit 2005
vor 17 Jahren
Verbindungsprobleme zu MSSQL

Hallo, ich habe einen Server programmiert, der auf eine MSSQL Datenbank zugreift.
Einen Tag läuft es aber irgendwann am Morgen (ca. 4 Uhr) wird die Verbindung getrennt. Ich kann sie dann nicht mehr öffnen. Warum? Was kann ich da machen?
Ich bin für jede Hilfe dankbar.

Hier ist der Code zum öffnen einer Verbindung. Immer, wenn die Verbindung geschlossen ist, versuche ich hiermit die Verbindung wieder zu öffnen. Ich verwende server1 als Hostname, sa als Username und kein Passwort. Schlägt der Verbindungsversuch fehl, so warte ich erst 10s dann 30s dann 60s. (Ich dachte das könnte helfen) aber leider tut es dies nicht. Was kann ich da machen?

Ich bin für jede Hilfe dankbar.


		public override bool Open()
		{
			try
			{
				
				lock(OPENLOCK)
				{
					if(realOpen() == true) return true;
					int sec;
				
					sec = 10;
					Console.WriteLine("Delaying reconnect for "+sec+" seconds");
					Thread.Sleep(sec*1000);
					if(realOpen() == true) return true;

					sec = 30;
					Console.WriteLine("Delaying reconnect for "+sec+" seconds");
					Thread.Sleep(sec*1000);
					if(realOpen() == true) return true;

					sec = 60;
					Console.WriteLine("Delaying reconnect for "+sec+" seconds");
					Thread.Sleep(sec*1000);
					if(realOpen() == true) return true;
					return false;
				}
			}
			catch(Exception ex)
			{
				this.sqlLiteDB.logError("Can't connect to SqlServerDatabase. Exception follows","SqlServerConnection.Open()");
				this.sqlLiteDB.logException(ex);
				return false;
			}
		}
		private bool realOpen()
		{
			try
			{
				string connectionString = "Server="+this.hostname+";";
				connectionString+= "Database="+this.database+";";
				connectionString+= "User ID="+this.username+";";
				if(!(this.password == null || this.password == ""))
				{
					connectionString+= "Password="+this.password+";";
				}				
				
				this.conn = new SqlConnection();
				this.conn.ConnectionString = connectionString;
				if(Globals.DEBUG) Console.Out.WriteLine(connectionString);
				this.conn.Open();
				
				return true;
			}
			catch(Exception ex)
			{
				this.sqlLiteDB.logError("Can't connect to SqlServerDatabase. Exception follows","SqlServerConnection.Open()");
				this.sqlLiteDB.logException(ex);
				return false;
			}
		}

3.728 Beiträge seit 2005
vor 17 Jahren
DB über Internet

Übers Internet sollte man keine Datenbankverbindung über längere Zeit offen halten, da man im Internet immer mal mit Timeouts und Verbindungsabbrüchen rechnen muss. Bei ASP.NET ist das was anderes, da die Datenbank oft direkt auf dem Webserver läuft. Da erfolgt keine Verbindung übers Internet und man kann deshalb Verbindungen längere Zeit offen lassen.

Du solltest beim Zugriff auf die SQL Server Datenbank übers Internet so vorgehen:*Verbindung zur DB aufbauen *SQL-Anweisungen absetzen *ggf. Ergebnisse entgegennehmen *Verbindung zur DB trennen

Und bei Internet-Anwendung grundsätzlich auf fehler vorbereitet sein und deshlab um jeden Datenbankzugriff einen try/catch Block legen (Die Ausnahmen aber auch fangen und behandeln).