2011-11-02 25 views
8

yürütmek için web.config süresi nasıl artırılır, ben null değer elde ediyorum. Doğrudan SQL Management Studio'da aynı sorgu sonuçları döndürür.ben web uygulamasında bir sorgu çalıştırıyorum zaman sql sorgusu

Bu sorunun bir zaman aşımı olduğunu düşünüyorum. Web uygulamasında sorgu yürütme süresini nasıl artırabilirim? Web.config: connectionstring'da zaman aşımı için kod yok. Orada bir zaman aşımı seçersem, sistemimin diğer bölümlerini etkiler mi?

+1

Bu yapılandırma tarafından kontrol edilemez: tanıtıldı

namespace ROS.WebService.Common { using System; using System.Configuration; using System.Data; using System.Data.SqlClient; public static class DataAccess { public static string ConnectionString { get; private set; } static DataAccess() { ConnectionString = ConfigurationManager.ConnectionStrings["ROSdb"].ConnectionString; } public static int ExecuteNonQuery(string cmdText, CommandType cmdType, params SqlParameter[] sqlParams) { using (SqlConnection conn = new SqlConnection(DataAccess.ConnectionString)) { using (SqlCommand cmd = new SqlCommand(cmdText, conn) { CommandType = cmdType, CommandTimeout = conn.ConnectionTimeout }) { foreach (var p in sqlParams) cmd.Parameters.Add(p); cmd.Connection.Open(); return cmd.ExecuteNonQuery(); } } } } } 

Değişim bağlantı dizesinden zaman aşımı değerini "yinelenen" için. SqlCommand'ın CommandTimeout'u ayarlayın. sayfa istek hakkında daha fazla bilgi edinmek için zaman aşımı ayarları yayını görebilecek http://stackoverflow.com/questions/7804622/how-to-upload-content-more-than-2-mbs-on-website-created-using-asp-net -4-0/7804670 # 7804670 – Prasanth

+1

Zaman aşımı nedeniyle bunun nasıl olduğunu biliyor musunuz? Sql Profiler kullanmayı deneyin ve hangi sorgulamanın oluşturulduğunu görün. Süre, okuma vb. Gibi diğer ayrıntıları görün. Sorguyu profilleyiciden alın ve sonra Sql Server'da sorguyu çalıştırın. –

+0

Iam kullanarak sql server 2005 yönetim studio.Where profiler.I bunu ust nasıl bilmiyorum? –

cevap

4

Sen httpRuntime blok eklemek ve (saniye cinsinden) executionTimeout başa gerekir.

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
... 
<system.web> 
    <httpRuntime executionTimeout="90" maxRequestLength="4096" 
    useFullyQualifiedRedirectUrl="false" 
    minFreeThreads="8" 
    minLocalRequestFreeThreads="4" 
    appRequestQueueLimit="100" /> 
</system.web> 
... 
</configuration> 

fazla bilgi için, msdn page bakınız.

+1

Bu, SQL sorgusu için değil, ASP.NET sayfasının yürütülmesi için zaman aşımıdır. – Abel

+1

httpRuntime executionTimeout, sorgunun bir parçası olarak sorguyu çalıştırıyorsanız, sorgunun yürütme zaman aşımına uğradığı sürece muhtemelen olmalıdır. Aksi takdirde, istek zaman aşımına uğrar ve sorgulama tamamlanmadan önce iptal edilir. – Triynko

1

Sana sorgu yürütme süresini artırmaz düşünüyorum, ancak istek için zaman aşımı artırmak gerekiyor.

Execution Timeout Specifies the maximum number of seconds that a request is allowed to execute before being automatically shut down by ASP.NET. (Default time is 110 seconds.)

detayları burada Sen web.config'de yapabilirsiniz https://msdn.microsoft.com/en-us/library/e1f13641%28v=vs.100%29.aspx

bir göz atın. örneğin

<httpRuntime maxRequestLength="2097152" executionTimeout="600" /> 
3

SQL Server bağlantı dizesinde sorgu zaman aşımı kontrol etmek hiçbir ayarı vardır ve aynı bildiğim kadarıyla bu diğer büyük veritabanları için aynıdır. Bir istisna görmeyi beklediğiniz gerçekten sorgu yürütülürken bir zaman aşımı olmadığını

Error: System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

kaldırdı: Ama, bu gördüğün sorun gibi görünmüyor. Bu bir sorun haline gelmek yoksa

, veritabanına kendisinin bir özellik olarak bir SQL Server veritabanı için varsayılan zaman aşımı değiştirebilir; Bunun için SQL Server Manager'ı kullanın.

sorgusu tam doğrudan çalıştırıyorsanız biri olarak Web uygulamasından aynı olduğundan emin olun. Bunu doğrulamak için bir uzman kullanın.

9

Tek bir şey yapabilirsiniz.

  1. AppSettings.config dosyasında (yoksa bir tane oluşturun), bir anahtar değer çifti oluşturun.
  2. Kod'da değeri çekin ve Int32'ye dönüştürün ve command.TimeOut'a atayın.

gibi: - appsettings.config olarak - Code>

<appSettings>  
    <add key="SqlCommandTimeOut" value="240"/> 
</appSettings> 

->

command.CommandTimeout = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SqlCommandTimeOut"]); 

bunu gerektiğini.

Not: - Microsoft uygulama bloklarından SqlHelper sınıfını kullandığımda, zaman aşımı sorunlarının çoğunu karşı karşıya getirdim. Kodunuzda varsa ve zaman aşımı sorunları yaşıyorsanız, sqlcommand kullanın ve yukarıda açıklanan zaman aşımını ayarlayın. Diğer tüm senaryolar için sqlhelper iyi yapılmalıdır.Eğer istemciniz, sqlhelper sınıfının sunduklarından biraz daha uzun bir süre beklemekte ise, devam edip yukarıdaki tekniği kullanabilirsiniz.

örnek: - bunu kullanın -

SqlCommand cmd = new SqlCommand(completequery); 

cmd.CommandTimeout = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SqlCommandTimeOut"]); 

SqlConnection con = new SqlConnection(sqlConnectionString); 
SqlDataAdapter adapter = new SqlDataAdapter(); 
con.Open(); 
adapter.SelectCommand = new SqlCommand(completequery, con); 
adapter.Fill(ds); 
con.Close(); 

yerine

DataSet ds = new DataSet(); 
ds = SqlHelper.ExecuteDataset(sqlConnectionString, CommandType.Text, completequery); 

Güncelleme: Ayrıca aşağıda cevap @Triynko bakın. Bunu da kontrol etmek önemlidir.

+0

Bu, istediğiniz zaman değeri değiştirmenize yardımcı olur. Ancak, büyük veri için planlama yapıyorsanız, işin niteliği ve verilerin nasıl birikebileceği konusunda daha fazla analiz yapmanızı ve Db tasarımınızı planlamanızı öneririm. Gerekli zaman aşımı arttıkça artan sayıda kayıt ve karmaşıklık artabilir. Eğer bir DB'nizi oluşturduysanız veya mimarlığa izin vermediyseniz, lütfen bu yorumu atın. –

0

Ben geç oyuna bir litle olduğumu fark, ama sadece bir webcoder zaman aşımı değiştirmeye çalışırken bir gün geçirdi. 30 saniyelik bir varsayılan zaman aşımı var gibi görünüyordu.

  • DB bağlantı dizesi Bağlan Zaman Aşımı
  • httpRuntime executionTimeout
  • basicHttpBinding bağlayıcı closeTimeout
  • basicHttpBinding bağlayıcı SendTimeout
  • basicHttpBinding bağlayıcı receiveTimeout
  • : Ben Evry diğer zaman aşımı değerini değiştirdikten sonra ben de dahil olmak üzere, bulabildiğim basicHttpBinding
openTimeout bağlama

Finaley Ben 30 saniye varsaymak oldu SqlCommand zaman aşımı olduğunu ortaya koymuştur.

Sadece komuta bağlantı dizesinin zaman aşımı çoğaltmak karar verdi. Bağlantı dizesi web.config dosyasında yapılandırılmıştır.

Bazı kod: CommandTimeout = conn.ConnectionTimeout