none
sql2000 time out 问题 RRS feed

  • 问题

  • 我用2000写了个存储过程, 使用 if else 分成了3个部分(根据参数 决定取那个部分执行,也就是说只取其一个部分执行,我使用了临时表 #table  来临时存储数据)
    我直接 用查询分析器执行 只要1秒钟,但是用 web页面调用确出现了 time out 情况,
    最后没有办法 我只好选择分解这个存储过程,把他分成了3个小过程,根据条件来 决定执行哪个,因此 我有疑问,是不是sql2000在使用 临时表(#table)时 有什么bug 或自身的缺陷导致, 我必须把一个复杂过程拆成3个简单的过程. 还是 这个做法 速度更快(如果说这个存储过程慢在使用查询分析器时就应该 time out ,为什么只是在 web应用程序调用时才出现)  我对此很不理解 希望 各位能帮我解答
    最后在问下如何避免 time out
    2009年6月15日 5:12

答案

全部回复

  • 在調用時可以設置
    CommandTimeout
    ROY WU(吳熹)
    2009年6月15日 5:41
    版主
  • 临时表存储在内存中,当数据量很大时会将数据flush到硬盘上。



    如果你调用了相同的sql语句,不论是通过web还是查询分析器都是没有区别的(假设底层数据没有变化)
    你的timeout的类型是什么?能给出具体的信息吗?是web页面的timeout还是sql的timeout?
    怀疑是你web程序的毛病


    SQL SERVER Engine Test
    2009年6月15日 6:11
    版主
  • 你好可以设置 SqlCommand.CommandTimeout = 0 为永不超时, 默认超时时间好像是 30 秒, 不过即然在查询分析器上执行1秒, 在Web上访问应该也不会超时的。你是不是一个是生产环境一个是测试环境哦? 数据量不一样,执行时间也会有差异
    知识改变命运,奋斗成就人生!
    2009年6月15日 6:18

  •         public static DataSet DateSetBack(string contr, string sqlstr, SqlParameter[] cmdParms)
            {
                using (SqlConnection con = new SqlConnection(contr))
                {

                   // con.ConnectionTimeout = 30;
                    System.Data.SqlClient.SqlDataAdapter sqRd = new System.Data.SqlClient.SqlDataAdapter(sqlstr, con);
                    DataSet ds = new DataSet();
                    sqRd.SelectCommand.CommandTimeout = outTime;
                 
                    if (cmdParms != null)
                    {
                        foreach (SqlParameter parm in cmdParms)
                            sqRd.SelectCommand.Parameters.Add(parm);
                    }
                    sqRd.Fill(ds);
                    sqRd.Dispose();
                    return ds;
                }

            }

    这个是代码 这个代码是 copy  SqlHelp的

    2009年6月22日 1:28
  • sqRd.SelectCommand.CommandTimeout = 0
    知识改变命运,奋斗成就人生!
    2009年6月22日 1:43