2014-09-23 10 views
9

Ich habe ein C# -Programm, das eine gespeicherte Prozedur ausführt. Wenn ich die gespeicherte Prozedur von Microsoft SQL Server Management Studio ausführen, funktioniert es einwandfrei. Die Ausführung dauert ungefähr 30 Sekunden. Wenn ich jedoch versuche, die gleiche gespeicherte Prozedur von einem C# -Programm auszuführen, tritt ein Timeout auf, obwohl ich das Timeout in der Verbindungszeichenfolge auf 10 Minuten eingestellt habe.Wie verhindere ich einen Zeitüberschreitungsfehler beim Ausführen einer Speicherprozedur mit einem SqlCommand?

Es scheint nach 30 Sekunden, obwohl ich es eingestellt habe, um 10 Minuten (für Testzwecke) zu ermöglichen.

+1

Wie rufen Sie das Verfahren an? Etwas, das 30 Sekunden vom Management-Studio benötigt, sollte nicht 10 Minuten von C# dauern, es sei denn, Sie haben irgendwo einen Fehler gemacht, der Indizes oder Statistiken unterbricht. –

Antwort

17

Das Timeout in der Verbindung dient nur zum Herstellen einer Verbindung zur Datenbank.

Es gibt eine separate CommandTimeout Eigenschaft der SqlCommand Klasse, von der ich annehme, ist, was Sie verwenden, um das gespeicherte proc auszuführen. Verwenden Sie diese Eigenschaft, um das Zeitlimit für die Ausführung anzugeben.

Ie.

+3

Wenn Sie 0 verwenden, bedeutet das kein Limit. – Juan

+2

Nur um darauf hinzuweisen, dass dies nur ein "Pflaster" für das Problem ist. Es ist besser herauszufinden, warum Sie überhaupt eine Auszeit bekommen, indem Sie das zugrunde liegende Problem lösen. –

+1

@ChrisDunaway Ich nehme an, Sie haben nie an großen Datenbanken gearbeitet? Ich hatte in Projekten SPs, die stundenlang in der Nacht arbeiteten, um Terabyte-Level-Datensätze zu integrieren. Manchmal braucht man nur Zeit für Dinge. – TomTom

6

Verwenden Sie die SqlCommand.CommandTimeout Eigenschaft Ihres Befehls, anstatt sie in der Verbindungszeichenfolge anzugeben.

Siehe MSDN als Referenz.

2

Sie müssen es in Code festlegen, indem Sie die CommandTimeout-Eigenschaft des SQL-Befehlsobjekts festlegen.

Der Parameter 'Verbindungszeitüberschreitung' in Verbindungszeichenfolge gibt die Zeit an, die beim Versuch wartet, eine Verbindung herzustellen, bevor der Versuch abgebrochen und ein Fehler generiert wird. Es ist nicht die Zeit, nach der die Ausführung der Abfrage beendet wird.

Danke, ich habe auch das gleiche Problem vor einigen Wochen konfrontiert und war zwischen den Timeout-Werten in Webconfig vs in Befehlsobjekt verwirrt. Ihre Frage geklärt hat meine Zweifel jetzt :)

reference link from msdn

1

Verbindungs-Timeout auf der Höhe der Zeit bezieht sich zulässig, während tatsächlich auf SQL Server zu verbinden. Befehlszeitlimit bezieht sich darauf, wie lange ein Befehl ausgeführt werden darf; In diesem Fall eine gespeicherte Prozedur. SqlCommand.CommandTimeout ist die Eigenschaft, die Sie suchen.