Próbuję zastąpić domyślny SqlConnection
limit czasu wynoszący 15 sekund i pojawia się błąd informujący, że plik
nie można przypisać właściwości ani indeksatora, ponieważ jest on tylko do odczytu.
Czy jest na to sposób?
using (SqlConnection connection = new SqlConnection(Database.EstimatorConnection))
{
connection.Open();
using (SqlCommand command = connection.CreateCommand())
{
command.CommandType = CommandType.StoredProcedure;
connection.ConnectionTimeout = 180; // This is not working
command.CommandText = "sproc_StoreData";
command.Parameters.AddWithValue("@TaskPlanID", order.Projects[0].TaskPlanID);
command.Parameters.AddWithValue("@AsOfDate", order.IncurDate);
command.ExecuteNonQuery();
}
}
c#
.net
sql-server
sqlconnection
Haymak3r
źródło
źródło
Odpowiedzi:
Jeśli chcesz podać limit czasu dla określonego zapytania, to CommandTimeout jest rozwiązaniem.
Jego zastosowanie to:
command.CommandTimeout = 60; //The time in seconds to wait for the command to execute. The default is 30 seconds.
źródło
Możesz ustawić wartość limitu czasu w parametrach połączenia, ale po połączeniu jest tylko do odczytu. Możesz przeczytać więcej na http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectiontimeout.aspx
Jak sugeruje Anil, ConnectionTimeout może nie być tym, czego potrzebujesz; kontroluje, jak długo sterownik ADO będzie czekał podczas nawiązywania nowego połączenia. Twoje użycie wydaje się wskazywać na potrzebę czekania dłużej niż zwykle na wykonanie określonego zapytania SQL, a w tym przypadku Anil ma dokładnie rację; użyj CommandTimeout (czyli R / W), aby zmienić oczekiwany czas ukończenia dla pojedynczego SqlCommand.
źródło
Bardziej przejrzystym sposobem jest ustawienie connectionString w pliku xml, na przykład
Web.Confing(WepApplication)
lubApp.Config(StandAloneApplication)
.<connectionStrings> <remove name="myConn"/> <add name="myConn" connectionString="User ID=sa;Password=XXXXX;Initial Catalog=qualitaBorri;Data Source=PC_NAME\SQLEXPRESS;Connection Timeout=60"/> </connectionStrings>
Kodem możesz uzyskać połączenie w ten sposób:
public static SqlConnection getConnection() { string conn = string.Empty; conn = System.Configuration.ConfigurationManager.ConnectionStrings["myConn"].ConnectionString; SqlConnection aConnection = new SqlConnection(conn); return aConnection; }
Możesz ustawić
ConnectionTimeout
tylko ty, aby utworzyć instancję. Podczas tworzenia instancji nie zmieniasz tej wartości.źródło
Zawsze możesz dodać go do parametrów połączenia:
connect timeout=180;
źródło
Możesz dodać parametry
Connection Timeout=180;
połączeniaźródło
Możesz również użyć SqlConnectionStringBuilder
SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(ConnectionString); builder.ConnectTimeout = 10; using (var connection = new SqlConnection(builder.ToString())) { // code goes here }
źródło
Stary post, ale gdy pojawiło się to, czego szukałem, pomyślałem, że dodam trochę informacji do tego tematu. Chciałem dodać komentarz, ale nie mam wystarczającej liczby przedstawicieli.
Jak powiedzieli inni:
connection.ConnectionTimeout jest używany do połączenia początkowego
command.CommandTimeout służy do indywidualnych wyszukiwań, aktualizacji itp.
Ale:
connection.ConnectionTimeout służy również do zatwierdzania i wycofywania transakcji.
Tak, to absolutnie szalona decyzja projektowa.
Tak więc, jeśli napotkasz limit czasu na zatwierdzenie lub wycofanie, musisz zwiększyć tę wartość za pomocą parametrów połączenia.
źródło
Limit czasu połączenia można ustawić na poziomie połączenia i poziomie poleceń.
var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Connection Timeout=10"; using (var con = new SqlConnection(connectionString)) { }
var connectionString = "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword"; using (var con = new SqlConnection(connectionString)) { using (var cmd =new SqlCommand()) { cmd.CommandTimeout = 10; } }
źródło
Musisz użyć
command.CommandTimeout
źródło
Znalazłem doskonały blog na ten temat: https://improve.dk/controlling-sqlconnection-timeouts/
Zasadniczo możesz ustawić limit czasu połączenia w parametrach połączenia lub ustawić ConnectionTimeout w obiekcie polecenia.
Należy pamiętać, że limit czasu jest w sekundach.
źródło