2013-06-24 4 views
1

Вот фрагмент кода, который плохо:времени ADO.NET из при попытке запустить хранимую процедуру

string storedProcedure = "sp3111Commissions"; 
    using (System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand()) { 
    string ConnectionString = CMSLayers.DataLayer.Universal.GetConnectionString(); 
    ConnectionString = 
    using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection()) { 
    //Response.Write(EndDate2.ToString()); 
    //Response.End(); 
      conn.ConnectionString = ConnectionString; 
    //Response.Write(ConnectionString); Response.End(); return null; 
    cmd.CommandType = System.Data.CommandType.StoredProcedure; 
    cmd.Connection = conn; 
    cmd.CommandText = storedProcedure; 
    cmd.Parameters.Add("@ShopID", System.Data.SqlDbType.Int); 
    cmd.Parameters["@ShopID"].Value = ShopID; 
    cmd.Parameters.Add("@StartDate", System.Data.SqlDbType.DateTime); 
    cmd.Parameters["@StartDate"].Value = StartDate; 
    cmd.Parameters.Add("@EndDate", System.Data.SqlDbType.DateTime); 
    cmd.Parameters["@EndDate"].Value = EndDate; 
    cmd.Parameters.Add("@StartDate2", System.Data.SqlDbType.DateTime); 
    cmd.Parameters["@StartDate2"].Value = StartDate2; 
    cmd.Parameters.Add("@EndDate2", System.Data.SqlDbType.DateTime); 
    cmd.Parameters["@EndDate2"].Value = EndDate2; 
    cmd.CommandTimeout = 1380; 

    try 
    { 
     System.Data.DataSet ds; 
     using (System.Data.SqlClient.SqlDataAdapter da= new System.Data.SqlClient.SqlDataAdapter()) { 
     System.Data.DataTable Table = null; 

     conn.Open(); 

     da.SelectCommand = cmd; 

     using (ds = new System.Data.DataSet()) { 

     da.Fill(ds); 

     if (ds.Tables.Count > 0) 
     { 
      if (ds.Tables[0].Rows.Count > 0) 
      { 
       Table = ds.Tables[0]; 
      } 
     } 
     conn.Close(); 
     return Table; 
     } 
     } 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    }  
    } 
    } 

То, что происходит это висит в течение 2 минут, а затем, наконец, получить тайм-аут ошибки. Однако, если я запустил хранимую процедуру в SQL Server Management Studio с такими же точными параметрами, данные возвращаются буквально мгновенно.

«Висеть» происходит на «da.Fill (ds)»; линия. У кого-нибудь есть идеи? Это .NET 2.0, кстати

+0

Что такое ** внутри ** эта хранимая процедура? –

+0

Вы пытались заменить хранимую процедуру чем-то тривиальным, который, как вы знаете, будет обрабатываться очень быстро? Если это помогает, вы знаете, что это хранимая процедура. Если это не поможет, вы знаете, что это ваш клиентский код. – catfood

+0

Можете ли вы включить строку соединения (без каких-либо паролей и других конфиденциальных данных, конечно)? –

ответ

2

Возможный дублирующий вопрос?

SqlDataAdapter.Fill() Timeout - Underlying Sproc Returns Quickly

Рассмотрим WITH(NOLOCK) в ваших SELECT заявления.

+0

Интересно. Позвольте мне добавить NOLOCK в мои соединения и посмотреть, работает ли это решение для меня. – Icemanind

+0

Это решило это для меня. – Icemanind