2009-08-04 7 views
0

Ich habe jetzt eine TON von beschissenen, nicht klaren, nicht relevanten Beispielen von Möglichkeiten gefunden, die ich beginnen kann, das Problem anzugehen. Ich kann nicht glauben, dass ich mehr als 10 Minuten damit verbracht habe, aber es waren bisher 3 Stunden.Timeout Frage re. stark typisierte Datasets und Objektdatenquellen

Ich schaue mir eine aspx-Seite mit fast ohne Code hinter. Diese Seite macht einen Crystal Report zu einem PDF.

Der Crystal Report ist an eine Objektquelle gebunden, die in einem doof großen Datensatz an eines der Tableadapters gebunden ist.

Das Problem besteht darin, die Abfrage abläuft. Es ist ein lang andauernder Proc (50 Sekunden) und das Timeout beträgt 30 Sekunden. Ich habe eine partielle Klasse hinzugefügt, aber da die Objekte nicht im Code gebunden sind, wäre ich nicht in der Lage, das Timeout auf diese Weise zu setzen und es ist eine Website und daher ist der hinter dem Code stehende Code sowieso eine ganze Menge XML und ich bin mir nicht sicher, ob ich hier eine Teilklasse hinzufügen kann, um die Zeit auszusetzen, und wenn ich könnte, würde ich ungefähr 70 Mal wiederholen, einmal pro Adapter.

So jemand eine bessere hat, einfacher oder zumindest ein Verfahren, das kann ich diesen Kristall Bericht erhalten, arbeitet heute so :)

Dank

Antwort

0

Können Sie nicht die Connection der sqlConnection erhöhen verwendet den Datensatz füllen?

heißt SQlConnection.ConnectionTimeout = somevalue

+0

Es tut uns leid, es ist nicht die Verbindung Timing aus sein das Befehlsobjekt in das Dataset eingebettet, das automatisch generiert wird, ist auf 30 festgelegt und es ist nicht ausgesetzt, so dass Sie es ändern können. – Robert

0

Es gibt zwei Möglichkeiten: das Verfahren optimieren oder Ihre Verbindungszeit erhöhen.

Ich weiß, dass Sie gesagt haben, es ist der Befehl Timing-out, aber ich wette, dass es die Verbindung mit der Datenbank ist, die Timeout ist. Ich habe noch nie davon gehört, dass das Befehlsobjekt abläuft.

Haben Sie ausprobiert Ändern/Festlegen der Timeout in der connection string?

+1

Befehlstimeouts und Verbindungstimeouts sind getrennt, das Verbindungstimeout beträgt 300 Sekunden. Sie haben wahrscheinlich SQL Management Studio verwendet und festgestellt, dass Sie über die GUI ein gespeichertes Proc ausführen können, bei dem die Timeout-Zeit abgelaufen ist, Ihre Verbindung jedoch noch offen ist. Gleiches Prinzip hier, auch wenn Sie den proc über die Befehlszeile aufgerufen haben, gibt es kein Timeout, da das Timeout dort nicht gilt. Es gilt jedoch über das GUI-Fenster, da es ein ähnliches Befehlsobjekt verwendet. Das Gleiche passiert, wenn Sie den Designer remote verwenden, um eine Tabellenstruktur zu ändern. Wenn Sie stattdessen sql-Befehle verwenden, wird kein Timeout ausgeführt.Verbindung ist nicht relevant – Robert

+0

Danke für die detaillierte Erklärung, ich hatte nie einen Grund zu der Annahme, dass CommandTimeout nicht anders als ConnectionTimeout war. –

0

Wenn Sie das Timeout des TableAdapters nicht ändern können und davon ausgehen, dass die Prozedur nicht schneller ausgeführt werden kann, sehe ich keine andere Option, als die Datenquelle des Berichts direkt auf die gespeicherte Prozedur zu setzen. Crystal kümmert sich nicht wirklich um Timeouts, die so niedrig sind.

+0

Ich habe die partielle Klasse hinzugefügt und das Befehls-Timeout offen gelegt. Das ASPX wurde geändert, so dass der Bericht zu diesem Zeitpunkt nicht gebunden war. Stattdessen wurde er in die Seitenladung gebunden, nachdem der Aufruf an die Daten selbst erfolgt war. Das Zeitlimit wurde auf 300 Sekunden im Code hinter dem ersten festgelegt. – Robert

2

Wenn Sie ObjectDataSource verwenden, verwenden Sie eine partielle Klasse, um das Befehlstimeout zu ändern.

Fügen Sie dem objectCreated-Ereignis der ObjectDataSource auf der aspx-Seite den folgenden Code hinzu:

protected void ObjectDataSource1_ObjectCreated(object sender, ObjectDataSourceEventArgs e) 
{ 
    DataSet1TableAdapters.DataTable1Adaptor ta; 
    ta = (DataSet1TableAdapters.DataTable1Adaptor)e.ObjectInstance; 
    ta.setCommandTimeOut(60); 

} 

Sory verpasste den Teil über die partiellen Klassen. Werfen Sie einen Blick auf Control TableAdapter Command Timeout Globally

Verwandte Themen