system.data.sqlclient.sqlexception:timeout expired

今天在测试一个通过wcf服务查询数据的程序时,一直出现这个错误。这个错误是在:

catch (System.ServiceModel.CommunicationException e)             

 {

      XtraMessageBox.Show("对不起!客户端获取服务数据通信报错!请查看服务是否正常!"+e.HelpLink+","+e.InnerException+","+e.Message+","+e.StackTrace+","+e.TargetSite+"", "系统提示", MessageBoxButtons.OK,                                                    MessageBoxIcon.Information);       }             

 开始我一直在客户端找原因,以为是调用服务的时候超时,经过一天半的纠结,崩溃,最后找出了,是由于执行sql语句或者存储过程时,因为涉及运算量巨大,所有超时。这个超时被服务端捕获到,然后传递到了客户端,所有在客户端一直会弹出这个错误。

解决办法:

using (SqlConnection conn = new SqlConnection(connectionString))       

 {          conn.Open();     

            DataTable dt = new DataTable();            

           SqlCommand cmd = new SqlCommand();      

           cmd.CommandType = CommandType.StoredProcedure;    

           cmd.CommandText = cmdText;       

           cmd.Connection = conn;    

           cmd.CommandTimeout = 300;//给执行加了个时间    

           if (paras != null)            

       {                   

        foreach (SqlParameter p in paras)             

                cmd.Parameters.Add(p);            

       }               

      try      

           {                  

          SqlDataAdapter da = new SqlDataAdapter(cmd);        

               da.Fill(dt);       

          }              

     catch (Exception ex)                 {  throw ex;  }      

         finally                

     {  cmd.Dispose();}            

      return dt;        

     }

查询数据量一定时,除了算法优化,查询速度还跟电脑的cpu等配置有关。

posted @ 2013-12-25 14:46  帅刺猬之家  阅读(1457)  评论(0编辑  收藏  举报