Używam ADO.Net + C# + VSTS 2008 + ADO.Net do połączenia z SQL Server 2008 Enterprise. Używam prawie tego samego wzorca/próbki, o którym tutaj wspomniano - przy użyciu ADO.Net DataReader do pobrania danych jednego wpisu (wiersza) przez jeden wpis (wiersz).ADO.Net DataReader timeout issue
http://msdn.microsoft.com/en-us/library/haa3afyz.aspx
Moje pytanie brzmi, czy mogę ustawić limit czasu SqlCommand w tej próbce, 1. Myślę, że czas oczekiwania dotyczy ile czasu możemy użyć jako wartości maksymalnej do pobierania jednego SZCZEGÓLNE wiersz, a nie całkowity timeout dla całej pętli entry-by-entry dla danych?
BTW: pętla Znaczy,
while (reader.Read())
{
Console.WriteLine("{0}\t{1}", reader.GetInt32(0),
reader.GetString(1));
}
2. a to liczy się tylko czas oczekiwania, ile czasu potrzeba, aby odzyskać wprowadzanie danych z bazy danych, a ten limit czasu nie ma nic wspólnego z tym, jak dużo czasu mamy do czynienia z każdym wpisem (np. jeśli ustawimy limit czasu na 20 sekund, i zajmie to 1 sekundę, aby pobrać jeden wpis danych z bazy danych, i zajmie 30 sekund, aby moje logiki aplikacji mogły manipulować wprowadzeniem danych, limit czasu nigdy się nie wydarzy).
Prawidłowe zrozumienie?
Dzięki Marc 1. Czy masz na myśli scenariusz do DataReadera, kiedy otrzymam instancję DataReadera, limit czasu nie przyniesie żadnego efektu? 2. Jeśli tak, moje nieporozumienie, czytam niektóre dokumenty wcześniej dla DataReader, ADO.Net pobiera dane w strumieniu transmisji, tzn. Nie wszystkie dane są pobierane z serwera SQL podczas tworzenia DataReadera. Jeśli to prawda, to powinno następować dalsze przeniesienie między klientem ADO.Net a serwerem serwera SQL Server?Ale jak już powiedziałeś, timeout nie ma już żadnego wpływu po utworzeniu DataReadera, więc nie ma kontroli limitu czasu dla dalszego przesyłania strumieniowego? – George2
Moje zainteresowanie powyższymi komentarzami polega na tym, że klienci będą przechowywać urządzenie DataReader przez bardzo długi czas i myślę, że w trybie strumieniowym (ponieważ ADO.Net nie może przewidzieć, czy klient chce odczytać więcej danych lub po prostu przerwać pętlę czytnika), połączenie będzie utrzymywane przy życiu przez cały czas. Chcę mieć kontrolę timeout dla takiego zachowania, które zmusza tak długi, aktywny czytnik do zamknięcia/zwolnienia połączenia z ADO.Net. Dowolny wydaje się, że SqlCommand (używane do tworzenia DataReader) limit czasu nie jest tym, czego szukam? Dzięki. – George2
Masz całkowitą rację: jeśli pozostawisz czytnik DataReader otwarty przez długi czas, podstawowe połączenie pozostanie otwarte w tym samym czasie. Nie ma powodu, aby powstrzymać cię przed zrobieniem tego - Twoim obowiązkiem jest upewnienie się, że nie robisz tego zbyt długo. –