Announcement

Collapse
No announcement yet.

SQL Abfrage nach Zeit abbrechen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL Abfrage nach Zeit abbrechen

    Wie kann man Programm Code abbrechen wenn das Ergebnis zu lange dauert.

    Ich habe eine Sql Abfrage die unter bestimmten Suchbedingungen zuviele Datensätze liefert und dadurch dauert se sehr lange bis ein Ergebnis kommt.

    Ich möchte folgenden Programmcode nach 15 Sekunden mit der Fehlermeldung abbrechen "Das Ergebnis hat zu viele Daten, schränken Sie Ihre Suche ein"

    con.ConnectionString = SQLServerAccount
    con.Open()

    sql = "SELECT trallala"

    da = New SqlClient.SqlDataAdapter(sql, con)
    da.Fill(ds, "ArtikelListe")

    Wie bekomme ich das hin?

    Danke schon mal für Eure Antwort

  • #2
    Versuch mal folgendes
    [highlight=vbnet]
    Dim cmd As New SqlCommand
    With cmd
    .Connection = Cnn
    .CommandText = strSQL
    .CommandTimeout = 15
    End With
    da = New SqlClient.SqlDataAdapter(cmd)
    [/highlight]

    In Try-Block setzten...
    ..hab jetzt die SQLExeption nicht vorliegen, hab auch so viel Daten nicht vorliegen das ich das jetzt testen könnte...

    ..sollte aber funzen

    Comment


    • #3
      Erst einmal Danke für die Antwort aber

      das löst das Problem nicht, der Timeout bezieht sich ob er den SQL Server in dieser Zeit erreichen kann, das kann er ja.
      Es kommen nur so viele Daten zurück, dass diese innerhalb von 15 Sekunden nicht alle verarbeitet werden können. Und genau dass möchte ich beschränken.

      Comment


      • #4
        Originally posted by pebbles View Post
        ... dass diese innerhalb von 15 Sekunden nicht alle verarbeitet werden können.
        Wenn die Verarbeitung lange dauert hat das aber nichts mit deiner Abfrage zu tun außer du beschrängst die Ergebnismenge mit einem Top xx/Limit xx.

        Oder meinst du das die übertragunsdauer zu groß ist (Beschränkung Netzbandbreite)?

        Comment


        • #5
          Das mit dem Top xx wäre auf jeden Fall auch ein Lösungsansatz.
          Wie sieht denn da die Syntax aus?

          Das Problem liegt eigentlich daran, dass die Abfrage je nach Suchbedingungen 130.000 Datensätze bringt und das dauert eben ewig (über VPN ca. 2-5 Minuten). Manhat dann den Eindruck dass, das Programm nicht mehr reagiert.
          Ein Möglichkleit mit ESC den Programmablauf zu stoppen wäre auch OK.
          Aber nur die Abfrage mit ESC beenden nicht das ganze Programm.

          Comment


          • #6
            OK habe die Syntax selbst gefunden.
            Die Syntax "TOP" ist dem SQL Befehl mitzugeben
            "Select TOP 100 Feld from Tabelle"

            Aber wie ich jetzt Programm Code mit ESC abbrechen kann weiss ich immer noch nicht

            Comment


            • #7
              Wie sollte das gehen? Du gibst der Datenbank einen Auftrag etwas zu tun. Das dauert eben. Wenn die Datenbank selbst nun keine Schnittstelle bietet intern das abzubrechen, wirst du eben warten müssen, bis das Ergebnis vorliegt.

              Es liegt jetzt an deinem Programm zu gestalten, wie gewartet wird:

              - prüfe den SQL; werden alle angeforderten Daten tatsächlich in einem Rutsch benötigt?
              - Daten in kleineren Happen holen
              - Das Holen der Daten in einen Thread auslagern, dann arbeitet das Programm in der Hauptsache weiter
              Christian

              Comment


              • #8
                Also, da würde ich generell fragen, was Du machen willst...

                Wenn jemand was sucht und bekommt als Ergebnis 130000 Datensätze... Ist das so gewollt??? Also will er die 130000 Datensätze? Wenn nicht, reicht eine Lösung mit Top durchaus...

                Wenn nicht, solltet Ihr vielleicht mal über Replikation nachdenken, damit die Daten lokal auf der Platte liegen und nicht per vpn alle Daten geschaufelt werden müssen.

                Ein Abbrechen des SQL-Befehls wird glaube ich auch nicht Deine Lösung sein, da vermutlich der Server Ruckzuck mit dem Befehl fertig ist. Einzig die Datenmenge, die der Server liefert, blockiert die Bandbreite der Leitung... Das dauert vermutlich so lange...

                Comment


                • #9
                  Originally posted by pebbles View Post
                  ... der Timeout bezieht sich ob er den SQL Server in dieser Zeit erreichen kann, das kann er ja.
                  ...
                  Bei ConnectionTimeout hätte ich Dir Recht gegeben aber CommandTimeout sollte genau das machen was M Merlin gesagt hat.

                  [EDIT]
                  Gerade geprüft, funktioniert wie beschrieben. Ich habe genug SQLs die zumindest länger als 15 Sekunden laufen und wenn ich den CommandTimeout auf 15 Sekunden setze, dann wirft das Programm eine Exception wenn die 15 Sekunden um sind und das Command noch nicht fertig is.
                  [/EDIT]

                  Gruß Womble

                  Comment

                  Working...
                  X