2013-08-26 70 views
36

Tôi có một vấn đề nhỏ và hy vọng ai đó có thể cho tôi một số lời khuyên. Tôi đang chạy một lệnh SQL, nhưng nó xuất hiện nó mất lệnh này khoảng 2 phút để trả lại dữ liệu vì có rất nhiều dữ liệu. Nhưng thời gian kết nối mặc định là 30 giây, làm cách nào để tăng điều này và áp dụng nó cho lệnh này?Tăng thời gian chờ lệnh cho lệnh SQL

public static DataTable runtotals(string AssetNumberV, string AssetNumber1V) 
{ 
    DataTable dtGetruntotals; 

    try 
    { 
     dtGetruntotals = new DataTable("Getruntotals"); 

     //SqlParameter AssetNumber = new SqlParameter("@AssetNumber", SqlDbType.VarChar, 6); 
     //AssetNumber.Value = AssetNumberV; 

     SqlParameter AssetNumber = new SqlParameter("@AssetNumber", SqlDbType.VarChar, 10); 
     AssetNumber.Value = AssetNumberV; 

     SqlParameter AssetNumber1 = new SqlParameter("@AssetNumber1", SqlDbType.VarChar, 10); 
     AssetNumber1.Value = AssetNumber1V; 

     SqlCommand scGetruntotals = new SqlCommand("EXEC spRunTotals @AssetNumber,@AssetNumber1 ", DataAccess.AssetConnection); 
     // scGetruntotals.Parameters.Add(AssetNumber); 
     scGetruntotals.Parameters.Add(AssetNumber); 
     scGetruntotals.Parameters.Add(AssetNumber1); 

     SqlDataAdapter sdaGetruntotals = new SqlDataAdapter(); 
     sdaGetruntotals.SelectCommand = scGetruntotals; 
     sdaGetruntotals.Fill(dtGetruntotals); 

     return dtGetruntotals; 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Error Retriving totals Details: Processed with this error:" + ex.Message); 
     return null; 
    } 
} 
+3

Cân nhắc thêm giá trị thời gian chờ vào tệp cấu hình, nếu không, bất kỳ điều chỉnh nào cũng có nghĩa là triển khai lại mã. – christiandev

Trả lời

73

phải mất lệnh này khoảng 2 phút để trả lại dữ liệu là có rất nhiều dữ liệu

Xấu Thiết kế. Cân nhắc sử dụng phân trang ở đây.

thời gian kết nối mặc định là 30 giây, làm thế nào để tăng này

Khi bạn đang phải đối mặt với một timout trên lệnh của bạn, do đó bạn cần phải tăng timout của sql command của bạn. Bạn có thể xác định nó trong lệnh của bạn như thế này

// Setting command timeout to 2 minutes 
scGetruntotals.CommandTimeout = 120; 
+0

bạn được chào đón, bạn có thể chấp nhận nó sau đó. Mặc dù tôi sẽ nghiêm túc kiềm chế bản thân mình bằng cách sử dụng một truy vấn mất 2 phút. thử sử dụng phân trang. – Ehsan

+0

Bất kỳ bất lợi nào khi tăng thời gian chờ lên 10 phút hoặc 30 phút? –

+0

@ManishKumarSingh Ai sẽ đợi 10 phút để truy vấn trả lại kết quả? Đây là một kỷ nguyên của mili giây. – Ehsan

14

Thêm thời gian chờ của SqlCommand. Xin lưu ý thời gian là thứ hai.

// Setting command timeout to 1 second 
scGetruntotals.CommandTimeout = 1; 
+9

Cảm ơn bạn đã viết, "Xin lưu ý thời gian ở vị trí thứ hai." – ShaileshDev

+0

Bất kỳ bất lợi nào khi tăng thời gian chờ lên 10 phút hoặc 30 phút? –

+0

Manish, bạn có muốn đợi 10 phút hoặc 30 phút để xử lý dữ liệu không? Nếu nó là một quá trình qua đêm và điều duy nhất của nó và sẽ không can thiệp bất cứ nơi nào khác, 30 phút tại sao không. Hoặc nếu bạn không chờ đợi kết quả, tại sao không. – MiscellaneousUser

0

Vì nó mất 2 phút để trả lời, bạn có thể tăng thời gian chờ đến 3 phút bằng cách thêm vào mã bên dưới

scGetruntotals.CommandTimeout = 180; 

Note: tham số giá trị bằng giây.

0

Đặt CommandTimeout thành 120 không được khuyến nghị. Thử sử dụng phân trang như đã đề cập ở trên. Đặt CommandTimeout thành 30 được coi là bình thường. Bất cứ điều gì hơn là xem xét phương pháp tiếp cận xấu và thường kết thúc một cái gì đó sai trái với việc thực hiện. Bây giờ thế giới đang chạy trên phương pháp tiếp cận MiliSeconds.

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