2011-11-02 37 views
8

Khi tôi đang chạy truy vấn trong ứng dụng web, tôi nhận được giá trị null. Truy vấn tương tự trực tiếp trong SQL Management Studio trả về kết quả.Cách tăng thời gian trong web.config để thực hiện truy vấn sql

Tôi nghĩ rằng sự cố là hết thời gian chờ. Làm thế nào tôi có thể tăng thời gian thực hiện truy vấn trong ứng dụng web? Trong web.config của tôi: connectionstring, không có mã cho thời gian chờ. Nếu tôi chọn thời gian chờ ở đó, điều đó có ảnh hưởng đến các phần khác của hệ thống của tôi không?

+1

Nó không thể được kiểm soát bằng cách cấu hình. Đặt CommandTimeout của SqlCommand. Để tìm hiểu thêm về cài đặt thời gian chờ yêu cầu trang, hãy xem bài đăng 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

Làm thế nào để bạn biết nó vì thời gian chờ? Hãy thử sử dụng Sql Profiler và xem truy vấn nào đang được tạo. Xem các chi tiết khác như thời lượng, đọc vv Kéo truy vấn từ profiler và sau đó thực thi, truy vấn đó trong Sql Server. –

+0

Iam sử dụng sql server 2005 studio quản lý.Đây là profiler.I không biết làm thế nào để ust nó? –

Trả lời

4

Bạn nên thêm khối httpRuntime và xử lý executionTimeout (tính bằng giây).

<?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> 

Để biết thêm thông tin, vui lòng xem msdn page.

+1

Đây là thời gian chờ để thực thi trang ASP.NET, không phải cho truy vấn SQL. – Abel

+1

Thời gian thực thi httpRuntime có thể ít nhất là thời gian chờ thực thi truy vấn nếu bạn đang chạy truy vấn như một phần của yêu cầu, nếu không yêu cầu sẽ hết thời gian và bị hủy trước khi truy vấn có cơ hội hoàn thành. – Triynko

1

Tôi nghĩ bạn không thể tăng thời gian thực hiện truy vấn, nhưng bạn cần tăng thời gian chờ cho yêu cầu.

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.)

Đối với chi tiết, xin vui lòng có một cái nhìn tại https://msdn.microsoft.com/en-us/library/e1f13641%28v=vs.100%29.aspx

Bạn có thể làm trong web.config. ví dụ:

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

Máy chủ SQL không có cài đặt để kiểm soát thời gian chờ truy vấn trong chuỗi kết nối và theo tôi biết điều này cũng giống với các cơ sở dữ liệu chính khác. Tuy nhiên, điều này không giống như vấn đề bạn đang thấy: Tôi hy vọng sẽ thấy một ngoại lệ được nêu ra

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

nếu thực sự có thời gian chờ thực hiện truy vấn.

Nếu điều này không thành vấn đề, bạn có thể thay đổi thời gian chờ mặc định cho cơ sở dữ liệu SQL Server làm tài sản của cơ sở dữ liệu; sử dụng SQL Server Manager cho việc này.

Hãy chắc chắn rằng truy vấn là chính xác giống với ứng dụng web của bạn giống như ứng dụng bạn đang chạy trực tiếp. Sử dụng một hồ sơ để xác minh điều này.

9

Bạn có thể làm một việc.

  1. Trong AppSettings.config (tạo một nếu không tồn tại), hãy tạo cặp giá trị khóa.
  2. Trong mã kéo giá trị và chuyển nó thành Int32 và gán nó vào lệnh.TimeOut.

như: - Trong appsettings.config ->

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

Trong Code ->

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

Điều đó sẽ làm điều đó.

Lưu ý: - Tôi gặp phải hầu hết các vấn đề thời gian chờ khi tôi sử dụng lớp SqlHelper từ các khối ứng dụng microsoft. Nếu bạn có nó trong mã của bạn và đang phải đối mặt với vấn đề thời gian chờ tốt hơn bạn sử dụng sqlcommand và thiết lập thời gian chờ của nó như mô tả ở trên. Đối với tất cả các kịch bản khác sqlhelper nên làm tốt.Nếu khách hàng của bạn là ok với chờ đợi lâu hơn một chút so với những gì lớp sqlhelper cung cấp, bạn có thể đi trước và sử dụng các kỹ thuật trên.

dụ: - Sử dụng này -

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(); 

Thay vì

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

Cập nhật: Cũng tham khảo @Triynko trả lời dưới đây. Điều quan trọng là phải kiểm tra điều đó.

+0

Điều này sẽ giúp bạn thay đổi giá trị bất cứ khi nào bạn muốn. Nhưng nếu bạn đang lập kế hoạch cho dữ liệu khổng lồ, tôi khuyên bạn nên phân tích nhiều hơn về bản chất của doanh nghiệp và cách dữ liệu có thể tích lũy, và sau đó lập kế hoạch thiết kế Db của bạn. Khi thời gian chờ yêu cầu có thể tăng lên với số lượng ngày càng tăng của các hồ sơ và phức tạp liên quan. Vui lòng hủy nhận xét này nếu bạn đã tạo DB hoặc không được phép cho kiến ​​trúc sư. –

0

Tôi nhận ra mình là một người chậm trễ vào trò chơi, nhưng chỉ cần dành hơn một ngày để cố gắng thay đổi thời gian chờ của dịch vụ web. Dường như thời gian chờ mặc định là 30 giây. Tôi sau khi thay đổi Évry trị thời gian chờ khác tôi có thể tìm, bao gồm:

  • DB chuỗi kết nối Connect Timeout
  • httpRuntime executionTimeout
  • basicHttpBinding ràng buộc closeTimeout
  • basicHttpBinding ràng buộc sendTimeout
  • basicHttpBinding ràng buộc receiveTimeout
  • liên kết basicHttpBinding openTimeout

Finaley Tôi thấy rằng đó là thời gian chờ SqlCommand đã được mặc định là 30 giây.

Tôi đã quyết định chỉ sao chép thời gian chờ của chuỗi kết nối vào lệnh. Chuỗi kết nối được cấu hình trong web.config.

Một số mã:

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(); 
     } 
     } 
    } 
    } 
} 

Thay đổi giới thiệu với "bản sao" giá trị thời gian chờ từ chuỗi kết nối: CommandTimeout = conn.ConnectionTimeout

Các vấn đề liên quan