public DataTable GetDataSet(string sql, params SqlParameter[] values)
        {
            using (SqlCommand cmd = new SqlCommand(sql, Connection))
            {
                DataSet ds = new DataSet();                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddRange(values);
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(ds);
                return ds.Tables[0];
            }
          
        }
这里就是调用的时候:
   public DataTable GetWeekProduct(DateTime startTime, DateTime endTime)
        {
            string strSql = "DB.DBO.usp_WeekProductReport  ";
            SqlParameter[] sp = new SqlParameter[] 
            {
                new SqlParameter("@DateFrom",startTime),
                new SqlParameter("@DateTo",endTime),
                
            };
            return base.GetDataSet(strSql, sp);         }我在数据库里面直接查询的话只需要2秒钟数据就出来了,数据量只有10条数据,但是在程序里面就死掉了,就是da.Fill(ds)的时候卡住了,
我是调用的一个存储过程来查询,网上说的那些设置cmd.CommandTimeout我也试过了,问题依旧,不知道有没有人遇见过。

解决方案 »

  1.   

    这应该没问题,你过程是什么样子,你在SQL中查询是什么写法?
      

  2.   


    string strSql = "DB.DBO.usp_WeekProductReport ";这是什么  看不懂 
    sql语句不对吧
      

  3.   


    存储过程稍微有点复杂,但是最后返回去的只是一张临时表:
    CREATE PROCEDURE [DBO].[usp_WeekProductYieldReport3] 
    -- @ModelPN VARCHAR(15)=' ',
    @DateFrom  smalldatetime=' ',
    @DateTo   smalldatetime=' ' ----- 10/31/2010
    ASSELECT @DateTo=DATEADD(DAY,1,@DateTo)
    SELECT FORDER=1,FPN_L='52', FFLOW='AOI'   INTO #FLOW
    UNION
    SELECT FORDER=2,FPN_L='52', FFLOW='AOI'
    UNION
    SELECT FORDER=3,FPN_L='50', FFLOW='TWS' 
    UNION
    SELECT FORDER=4,FPN_L='52', FFLOW='T01' 
    UNION
    SELECT FORDER=5,FPN_L='50', FFLOW='T01' 
    UNION
    SELECT FORDER=6,FPN_L='52', FFLOW='T03' 
    UNION
    SELECT FORDER=7,FPN_L='80', FFLOW='T11' 
    UNION
    SELECT FORDER=8,FPN_L='80', FFLOW='Q01' 
    UNION
    SELECT FORDER=9,FPN_L='80', FFLOW='Q02' 
    -------------------------------------------------------------------------------------
    SELECT FNO=21, FMPN='80-A368-30W00',FPN='52-A368-11W00', FORDER=1 INTO #805052
    UNION
    SELECT FNO=22, FMPN='80-A368-30W00',FPN='52-A368-00W00', FORDER=2
    UNION
    SELECT FNO=23, FMPN='80-A368-30W00',FPN='52-A368-05W00', FORDER=2
    UNION
    SELECT FNO=24, FMPN='80-A368-30W00',FPN='50-A368-30W00', FORDER=3
    UNION
    SELECT FNO=25, FMPN='80-A368-30W00',FPN='52-A368-11W00', FORDER=4
    UNION
    SELECT FNO=26, FMPN='80-A368-30W00',FPN='50-A368-30W00', FORDER=5
    UNION
    SELECT FNO=27, FMPN='80-A368-30W00',FPN='52-A368-11W00', FORDER=6
    UNION
    SELECT FNO=28, FMPN='80-A368-30W00',FPN='80-A368-30W00', FORDER=7
    UNION
    SELECT FNO=29, FMPN='80-A368-30W00',FPN='80-A368-30W00', FORDER=8
    UNION
    SELECT FNO=30, FMPN='80-A368-30W00',FPN='80-A368-30W00', FORDER=9
    --------------------------------------------------------------------------------------
    SELECT FID=IDENTITY(INT,1,1), B.FMPN, B.FPN, A.FFLOW, FTOTQTY=0, FFQTY=0, A.FORDER
    INTO #R FROM #FLOW A, #805052 B
    WHERE A.FORDER=B.FORDER ---A.FPN_L=LEFT(B.FPN,2)
    ORDER BY B.FMPN, A.FORDER, B.FNO
    SELECT * INTO #MOD FROM viwModelB5 WHERE MOD_CUSTOM='CC002'
    select SONO = MSO_NO, FPN=MSO_MODEL,PN80=MSO_MODEL, FPN2=MSO_MODEL, MSO=MSO_NO, IFMB = 'M' into #temp_so
    from viwModsoB5, #MOD
    where MSO_MODEL=MOD_NO
    UNION ALL
    select b.BSO_NO, BSO_BOARD,m.MSO_MODEL, '52'+SUBSTRING(BSO_BOARD,3,15), BSO_MSOFOR, 'B'
    from viwBodsoB5 b, viwModsoB5 m, #MOD
    where m.MSO_MODEL=MOD_NO and b.BSO_MSOFOR = m.MSO_NO
    ORDER BY MSO, SONO
    SELECT  PN80=SPACE(13), FPN=SPACE(13), FFLOW=SPACE(5), FTOTQTY=0, FREPQTY=0 INTO #TEMPR0 WHERE 1=0
    SELECT DISTINCT A.FFlow, A.FPBC, A.FMPN, B.FBC ----, SONO -- 
    INTO #AOI0 FROM viwMPBCINFOB5 A, viwMBCINFOB5 B ----, #temp_so C
    WHERE A.FFLOW='AOI' AND B.FFLOW='SMT'  ----AND A.FMPN=C.FPN2 AND C.IFMB='B' 
    AND A.FPBC=B.FPBC AND A.FINPUTDATE>=@DATEFROM AND A.FINPUTDATE<@DateTo
    SELECT BCS_MODFOR AS PN80, A.* INTO #AOI FROM #AOI0 A, VIWBCSTATUSB5 B WHERE FBC=BCS_CTSNODROP TABLE #AOI0INSERT INTO #TEMPR0
    SELECT PN80,FMPN, 'AOI', COUNT(*), 0 FROM #AOI GROUP BY PN80,FMPNSELECT FBC, MAX(FMPN) AS FMPN INTO #RPN FROM #AOI GROUP BY FPBC, FBC
    INSERT INTO #TEMPR0
    SELECT B.PN80,'50'+SUBSTRING(C.FMPN,3,15), 'AOI', 0, COUNT(*) FROM viwMPBCINFOB5 A, #AOI B, #RPN C
    WHERE A.FFLOW='SMTR' AND A.FPBC=B.FBC AND A.FPBC=C.FBC
    GROUP BY B.PN80,C.FMPN
    select m.PN80, M.FPN, m.IFMB, s.SOT_OPESEQ, SOT_OPEDESC, Process = o.OPE_DESC, ProcessedQty = sum(s.SOT_PQTY+s.SOT_OQTY+s.SOT_FQTY+s.SOT_SQTY), 
            PassedQty = sum(s.SOT_PQTY+s.SOT_OQTY)
    into #temp_res
    from viwSodailytotalB5 s, #temp_so m, viwOPERATIONB5 o
    where s.SOT_DATE >=@DateFrom and s.SOT_DATE < @DateTo
    and s.SOT_SONO = m.SONO AND SOT_OPEDESC IN ('TWS','T01', 'T03','T11','Q01','Q02')
    and s.SOT_OPEDESC = o.OPE_CODE
    group by  m.PN80,M.FPN, m.IFMB, s.SOT_OPESEQ, SOT_OPEDESC, o.OPE_DESC
    INSERT INTO #TEMPR0
    select PN80, FPN, SOT_OPEDESC, ProcessedQty, PassedQty --Process
    from #temp_res
    order by  PN80,FPN, IFMB, SOT_OPESEQSELECT PN80, FPN, FFLOW, FTOTQTY=SUM(FTOTQTY), FREPQTY=SUM(FREPQTY) 
    INTO #TEMPR FROM #TEMPR0
    GROUP BY PN80, FPN, FFLOWUPDATE #R SET FTOTQTY=B.FTOTQTY, FFQTY=B.FREPQTY
    FROM #R A, #TEMPR B
    WHERE A.FMPN=B.PN80 AND A.FPN=B.FPN AND  A.FFLOW=B.FFLOWUPDATE #R SET FFQTY=FTOTQTY WHERE FFLOW='AOI'---ADD 2011-02-17SELECT FMPN, MAX(FPN) AS FPN, FFLOW, SUM(FTOTQTY) AS FTOTQTY, SUM(FFQTY) AS FFQTY, FORDER
    INTO #R2 FROM #R GROUP BY FMPN, FFLOW, FORDER
    SELECT FID=FORDER,* into #AllInfo  FROM #R2 ORDER BY FMPN,FORDERselect * from #AllInfo ORDER BY FMPN,FORDER
    GO
      

  4.   


    da.Fill(ds,"这块要把临时表名称加里面");
      

  5.   

    你在SQL中执行后再到程序执行一下看看
      

  6.   


    public DataTable GetDataSet(string sql, params SqlParameter[] values)
      {
      using (SqlCommand cmd = new SqlCommand(sql, Connection))
      {
      DataSet ds = new DataSet();  cmd.CommandType = CommandType.StoredProcedure;
      cmd.Parameters.AddRange(values);
      SqlDataAdapter da = new SqlDataAdapter(cmd);
      da.Fill(ds);
      return ds.Tables[0];
      }
        
      }这一部分是DBHelper里面的一个方法,一直都没有写那个表名,如果现在改的话很多的地方都要改了。
      

  7.   

    试试把"DB.DBO.usp_WeekProductReport "改成"usp_WeekProductReport "
      

  8.   


    SQL77:
    我在SQL里面执行的话耗时1秒钟,接着就在程序里面去执行,但是就在da.Fill的时候死了
      

  9.   


    晕倒  重新写个方法 GetDataSet新名称()   专门给那个存储过程用 
      

  10.   


    我另外写了一方法,将临时表名称也传进去了,但是问题依旧啊,能想到的办法都想了,我郁闷:Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
      

  11.   

    看看这个
    http://topic.csdn.net/u/20110822/16/91b7fccc-abb8-429f-a237-665b6428ebb1.html
      

  12.   


    可以连接到服务器的,我这个DBHelper继承了一个类,那个类里面有设置连接服务器。
      

  13.   


      public DataTable GetDataSetForWeekYield(string TalbeName,string sql, params SqlParameter[] values)
            {
                using (SqlCommand cmd = new SqlCommand(sql, Connection))
                {
                    DataSet ds = new DataSet();                cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddRange(values);
                     
                    SqlDataAdapter da = new SqlDataAdapter(cmd);
                    //da.Fill(ds, "" + TalbeName + "");
                    da.Fill(ds, "#AllInfo");
                    return ds.Tables[0];
                }        
               
            }
    我现在这样写,把临时表也传入进去了,但是还是到了da.Fill(ds, "#AllInfo")的时候就死掉了啊,SQL里面我这样执行:usp_WeekProductYieldReport   '02/07/2012','02/09/2012' 耗时不到1秒钟,数据只有10条。
      

  14.   

    Adapter的Fill办法填充的是数据表表,因此你的这句:DataSet ds = new DataSet();
    就可以改成DataTable Dt=new DataTable();
    下面的填充就是:
     da.Fill(Dt);
     Return Dt;
    你创建的DataSet里面是不是还没有数据表啊?
    还可以用DataTable的Load方法LoadDataReader
     SqlDataReader Dr= Cmd.ExecuteReader();
     Dt.Load(Dr, LoadOption.PreserveChanges);
      

  15.   

    打开SQLSERVER的查询跟踪,监测你程序执行存储过程时的数据库操作,如果是SQL语句问题,可以看到当时执行的SQL语句,并分析语句,如果没看到任何SQL语句,就可能是连接问题,未连接到数据库。
      

  16.   


    cnwin:你的方法为都试过了,第一种方法还是在Fill的时候就超时了,第二种方法在SqlDataReader Dr= Cmd.ExecuteReader();的时候超时。
      

  17.   


    qldsrx:我的SQL是Server2000的,怎么样可以跟踪的到?
      

  18.   

    sql Server Profiler可以跟踪数据库执行情况。
    你说用DataReader时Cmd.ExecuteReader()这时就死掉了?那就是在获取数据过程超时了。
      

  19.   

    “开始”-->"程序"-->"Microsoft SQL Server"-->"事件探查器",打开后运行就可以跟踪到了,难道你就从未用过它?这可是调试C#操作数据库的必备工具啊,特别是要用Linq To Sql等自动创建SQL语句的时候,可以分析自动产生的SQL的好坏。
      

  20.   

    这样吧,你最后不要返回#xxxx这样的临时表,而是返回到一个数据库表中(不带“#”号),用ExcuteCommand方法执行你的存储过程,如果执行成功则“select from 你的表”。这样应该没问题。
      

  21.   

    补充:用上面的办法你要加一个@ErrString参数(你就保证你的存储过程执行肯定没问题?)在你存储过程可能出问题的地方写一下如下类似语句:if @@error <> 0 
       begin
      select @error_string = 'xxxx时出错!'
      rollback tran
      return
       end
    在存储过程最后(能执行到最后说明执行成功)select @error_string =‘ok'
    这样在你程序里判断if (Rst=="ok")
                    {
                       //返回 查询你的表
                    }
                    else
                    {
                        throw new Exception(Rst);
                    }
      

  22.   

    找到问题了,我把那个存储过程里面的代码全部注释了,然后直接写了一句select * from table,然后程序就可以执行下去了,但是我那个存储过程在SQL里面执行也没问题,并且执行时间也很快,这是为什么?求解。
      

  23.   

    CREATE PROCEDURE [DBO].[usp_WeekProductYieldReport3] 
    -- @ModelPN VARCHAR(15)=' ',
    @DateFrom  smalldatetime=' ',
    @DateTo   smalldatetime=' ' ----- 10/31/2010
    ASSELECT @DateTo=DATEADD(DAY,1,@DateTo)
    SELECT FORDER=1,FPN_L='52', FFLOW='AOI'   INTO #FLOW
    UNION
    SELECT FORDER=2,FPN_L='52', FFLOW='AOI'
    UNION
    SELECT FORDER=3,FPN_L='50', FFLOW='TWS' 
    UNION
    SELECT FORDER=4,FPN_L='52', FFLOW='T01' 
    UNION
    SELECT FORDER=5,FPN_L='50', FFLOW='T01' 
    UNION
    SELECT FORDER=6,FPN_L='52', FFLOW='T03' 
    UNION
    SELECT FORDER=7,FPN_L='80', FFLOW='T11' 
    UNION
    SELECT FORDER=8,FPN_L='80', FFLOW='Q01' 
    UNION
    SELECT FORDER=9,FPN_L='80', FFLOW='Q02' 
    -------------------------------------------------------------------------------------
    SELECT FNO=21, FMPN='80-A368-30W00',FPN='52-A368-11W00', FORDER=1 INTO #805052
    UNION
    SELECT FNO=22, FMPN='80-A368-30W00',FPN='52-A368-00W00', FORDER=2
    UNION
    SELECT FNO=23, FMPN='80-A368-30W00',FPN='52-A368-05W00', FORDER=2
    UNION
    SELECT FNO=24, FMPN='80-A368-30W00',FPN='50-A368-30W00', FORDER=3
    UNION
    SELECT FNO=25, FMPN='80-A368-30W00',FPN='52-A368-11W00', FORDER=4
    UNION
    SELECT FNO=26, FMPN='80-A368-30W00',FPN='50-A368-30W00', FORDER=5
    UNION
    SELECT FNO=27, FMPN='80-A368-30W00',FPN='52-A368-11W00', FORDER=6
    UNION
    SELECT FNO=28, FMPN='80-A368-30W00',FPN='80-A368-30W00', FORDER=7
    UNION
    SELECT FNO=29, FMPN='80-A368-30W00',FPN='80-A368-30W00', FORDER=8
    UNION
    SELECT FNO=30, FMPN='80-A368-30W00',FPN='80-A368-30W00', FORDER=9
    --------------------------------------------------------------------------------------
    SELECT FID=IDENTITY(INT,1,1), B.FMPN, B.FPN, A.FFLOW, FTOTQTY=0, FFQTY=0, A.FORDER
    INTO #R FROM #FLOW A, #805052 B
    WHERE A.FORDER=B.FORDER ---A.FPN_L=LEFT(B.FPN,2)
    ORDER BY B.FMPN, A.FORDER, B.FNO
    SELECT * INTO #MOD FROM viwModelB5 WHERE MOD_CUSTOM='CC002'
    select SONO = MSO_NO, FPN=MSO_MODEL,PN80=MSO_MODEL, FPN2=MSO_MODEL, MSO=MSO_NO, IFMB = 'M' into #temp_so
    from viwModsoB5, #MOD
    where MSO_MODEL=MOD_NO
    UNION ALL
    select b.BSO_NO, BSO_BOARD,m.MSO_MODEL, '52'+SUBSTRING(BSO_BOARD,3,15), BSO_MSOFOR, 'B'
    from viwBodsoB5 b, viwModsoB5 m, #MOD
    where m.MSO_MODEL=MOD_NO and b.BSO_MSOFOR = m.MSO_NO
    ORDER BY MSO, SONO----SELECT * FROM #temp_so ORDER BY PN80
    SELECT  PN80=SPACE(13), FPN=SPACE(13), FFLOW=SPACE(5), FTOTQTY=0, FREPQTY=0 INTO #TEMPR0 WHERE 1=0-----AOI
    SELECT DISTINCT A.FFlow, A.FPBC, A.FMPN, B.FBC ----, SONO -- 
    INTO #AOI0 FROM viwMPBCINFOB5 A, viwMBCINFOB5 B ----, #temp_so C
    WHERE A.FFLOW='AOI' AND B.FFLOW='SMT'  ----AND A.FMPN=C.FPN2 AND C.IFMB='B' 
    AND A.FPBC=B.FPBC AND A.FINPUTDATE>=@DATEFROM AND A.FINPUTDATE<@DateTo
    ---- AND FMPN='52-A368-10W00'SELECT BCS_MODFOR AS PN80, A.* INTO #AOI FROM #AOI0 A, VIWBCSTATUSB5 B WHERE FBC=BCS_CTSNO
    -----DELETE #AOI WHERE FBC NOT IN (SELECT BCS_CTSNO FROM #VSNO)
    DROP TABLE #AOI0
    /*
    SELECT * FROM #AOI 
    WHERE PN80='80-A368-00W00' 
    order by FBC
    RETURN
    */--1. AOI
    /*SELECT  * FROM viwMPBCINFOB5 A, viwMBCINFOB5 B, #temp_so C
    WHERE A.FFLOW='AOI' AND B.FFLOW='SMT' AND A.FMPN=C.FPN2 AND C.IFMB='B' 
    AND A.FPBC=B.FPBC AND A.FINPUTDATE>=@DATEFROM AND A.FINPUTDATE<@DateTo
    ORDER BY C.PN80,A.FFlow, A.FPBC, A.FMPN, B.FBC
    */
    INSERT INTO #TEMPR0
    SELECT PN80,FMPN, 'AOI', COUNT(*), 0 FROM #AOI GROUP BY PN80,FMPNSELECT FBC, MAX(FMPN) AS FMPN INTO #RPN FROM #AOI GROUP BY FPBC, FBC
    INSERT INTO #TEMPR0
    SELECT B.PN80,'50'+SUBSTRING(C.FMPN,3,15), 'AOI', 0, COUNT(*) FROM viwMPBCINFOB5 A, #AOI B, #RPN C
    WHERE A.FFLOW='SMTR' AND A.FPBC=B.FBC AND A.FPBC=C.FBC
    GROUP BY B.PN80,C.FMPN
    --2. SMT REPAIR
    /*SELECT * FROM viwMPBCINFOB5 A, #AOI B, #RPN C
    WHERE A.FFLOW='SMTR' AND A.FPBC=B.FBC AND A.FPBC=C.FBC
    ORDER BY B.PN80,C.FMPN
    */
    select m.PN80, M.FPN, m.IFMB, s.SOT_OPESEQ, SOT_OPEDESC, Process = o.OPE_DESC, ProcessedQty = sum(s.SOT_PQTY+s.SOT_OQTY+s.SOT_FQTY+s.SOT_SQTY), 
            PassedQty = sum(s.SOT_PQTY+s.SOT_OQTY)
    into #temp_res
    from viwSodailytotalB5 s, #temp_so m, viwOPERATIONB5 o
    where s.SOT_DATE >=@DateFrom and s.SOT_DATE < @DateTo
    and s.SOT_SONO = m.SONO AND SOT_OPEDESC IN ('TWS','T01', 'T03','T11','Q01','Q02')
    and s.SOT_OPEDESC = o.OPE_CODE
    group by  m.PN80,M.FPN, m.IFMB, s.SOT_OPESEQ, SOT_OPEDESC, o.OPE_DESC/*
    select * from viwSodailytotalB5 s, #temp_so m, viwOPERATIONB5 o
    where s.SOT_DATE >=@DateFrom and s.SOT_DATE < @DateTo
    and s.SOT_SONO = m.SONO AND SOT_OPEDESC IN ('TWS','T01', 'T03','T11','Q01','Q02')
    and s.SOT_OPEDESC = o.OPE_CODE
    return
    */
    /*
    --3. VTS
    select m.PN80, M.FPN, m.IFMB, s.SOT_OPESEQ, SOT_OPEDESC, Process = o.OPE_DESC, ProcessedQty = s.SOT_PQTY+s.SOT_OQTY+s.SOT_FQTY+s.SOT_SQTY, 
            PassedQty = s.SOT_PQTY+s.SOT_OQTY
    from viwSodailytotalB5 s, #temp_so m, viwOPERATIONB5 o
    where s.SOT_DATE >=@DateFrom and s.SOT_DATE < @DateTo
    and s.SOT_SONO = m.SONO AND SOT_OPEDESC IN ('TWS','T01', 'T03','T11','Q01','Q02')
    and s.SOT_OPEDESC = o.OPE_CODE
    ORDER by  m.PN80,M.FPN, m.IFMB, s.SOT_OPESEQ, SOT_OPEDESC, o.OPE_DESC
    */
    ----SELECT * FROM #TEMPR0
    ----SELECT * FROM #temp_res
    ----RETURNINSERT INTO #TEMPR0
    select PN80, FPN, SOT_OPEDESC, ProcessedQty, PassedQty --Process
    from #temp_res
    order by  PN80,FPN, IFMB, SOT_OPESEQSELECT PN80, FPN, FFLOW, FTOTQTY=SUM(FTOTQTY), FREPQTY=SUM(FREPQTY) 
    INTO #TEMPR FROM #TEMPR0
    GROUP BY PN80, FPN, FFLOW----select * from #temprUPDATE #R SET FTOTQTY=B.FTOTQTY, FFQTY=B.FREPQTY
    FROM #R A, #TEMPR B
    WHERE A.FMPN=B.PN80 AND A.FPN=B.FPN AND  A.FFLOW=B.FFLOWUPDATE #R SET FFQTY=FTOTQTY WHERE FFLOW='AOI'---ADD 2011-02-17SELECT FMPN, MAX(FPN) AS FPN, FFLOW, SUM(FTOTQTY) AS FTOTQTY, SUM(FFQTY) AS FFQTY, FORDER
    INTO #R2 FROM #R GROUP BY FMPN, FFLOW, FORDER
    --- ORDER BY FORDER---FID=IDENTITY(INT,1,1), --SELECT FID=FORDER,* FROM #R2 ORDER BY FMPN,FORDERSELECT FID=FORDER,* into #AllInfo  FROM #R2 ORDER BY FMPN,FORDER--select * from #AllInfo ORDER BY FMPN,FORDER
    delete  WeekProductinsert into  WeekProduct select * from #AllInfo ORDER BY FMPN,FORDERselect * from WeekProduct ORDER BY FMPN,FORDERGO
    最后两句话就是将数据放到我新建的表里面去了,但是这样居然还是出现超时。
      

  24.   

    qldsrx :
    我发现跟踪的时候有这个错误,提示没有可用的连接,并自动创建一个,这是什么意思呢?
    No matching connection to execute this on. Will auto-create one.
      

  25.   

    你还是在你存储过程最后获得表啊。当然正常情况下也没问题,我试过我的改成这种方式是可以的。
    看你上面说的存储过程就是一句话(select)是可以获得数据的?是吗?那就是说用你现在的连接可以获得数据表了?连接该没问题啊。我上面的意思就是让你把执行和获取表分开来。这样如果执行过程有问题可以在应用程序中报出来。就目前情况看说明你连接没问题,Sql Server中执行也没问题。那就是程序调用有问题了。
    你的时间参数有问题:转一下
    StartDate.ToString()我都是这么用的,当然我是自己写的DbHelp类:我的代码如下: Db.AddInParameter("@first_date", DbType.String, StartDate.ToString());
     Db.AddInParameter("@Last_date", DbType.String, EndDate.ToString());
     Db.AddOutParameter("@error_string", DbType.String, "ok", 255);
      Db.ExecuteNonQuery("sp_Stock_Statist", CommandType.StoredProcedure);
      string Rst = Db.Parameters["@error_string"].Value.ToString();
      if (Rst=="ok")
       {
            return TableOperator.GetDataTable<dsResult.month_statistDataTable>();
       }
       else
       {
            throw new Exception(Rst);
       }
      

  26.   


    分开执行都没问题,第一步:将存储过程的数据放到一张表里面。OK第二步:查询那张有数据的表,OK
    分开都是可以的,但是合在一起就不行了。
      

  27.   

    哦,是在执行存储过程后,在程序中查询的表吧。那就先这样用着吧。我都这样用的。我存储过程是有一个Out参数@error_String的,这样在存储过程里执行某些语句后就可以判断执行是否有错误,有错误的话设置这个@Error_string的值(描述清楚是执行什么过程出错)。
    不过你描述里说的似乎是不响应了,这就真奇怪了。你描述说分开来,那就是说存储过程最后不进行Select是没有问题的,对吧?加上查询语句就有问题?这不奇怪吗?倒不如先这样分开来用吧。
      

  28.   

    你上面的问题应该是出在程序里面,也许是你的DbHelper类的问题。你试试不使用DbHelper类自己直接写一写试试。
      

  29.   

    再说此时也没有必要用Aapter,因为你只是在查询,用Command就可以。
      

  30.   

    我在Visual FoxPro里面直接用命令的方式来查询,发现也要很长时间数据才会出来,大约5分钟。因此断定一定是存储过程的问题了,
    因为这个存储过程在服务器A上面,但是又查询了服务器B上面的数据,我在服务器A上面建了很多的视图,这些视图都是为了去查询服务器B上面的表,
    用到了LinkServer。估计就是这个情况导致很慢的,现在我把存储过程都写在服务器B上面,然后在服务器A上面直接调用,调用如下:
    CREATE PROCEDURE [DBO].[usp_WeekProductYieldReport] 
    @DateFrom  smalldatetime=' ',
    @DateTo   smalldatetime=' ' 
    AS
    EXEC ServerName.DataBase.DBO.usp_WeekProductYieldReport @DateFrom,@DateTo
    GO这样一来查询数据就非常的快了,程序里面在Da.Fill的时候也不会出现超时了,总结一点:跨服务器访问数据的情况下,
    尽量将那些复杂的业务逻辑放在同一个服务器上面执行,等到执行完成之后再在其它的服务器上面调用。感谢大家的热情帮助!
      

  31.   

    你地问题 我 刚刚碰到了啊 是这样的 我的情况跟你的不一样。我的是在同一服务器,在数据库执行存储过程非常快,用时几乎为0,绝对不是存储过程的问题,我的表的数据有80万条,我的分页存储过程查询很快滴,几乎是0。但在c#中SqlDataAdapter fill总是超时,是因为我在查询的那一张表中创建了一个索引,是在2个字段上面创建的。后来我改成只在那个表的主键字段上创建索引就可以了,就不会出现超时的问题。我也郁闷,为什么在2个字段上面创建索引就不行。反正再去研究一下。
      

  32.   

    SqlCommand cmd = new SqlCommand();
    cmd.CommandTimeout = 180;
     再运行,即解决,这里设置的时间的180秒,即三分钟!可根据需要设置,如果过长,也可以设置为0,当此属性设置为0时表示不限制时间。此属性值应该慎用。还需要在Web.config配置文件中设置http请求运行时限间 <system.web>  
    <httpRuntime maxRequestLength="102400" executionTimeout="720" />
    </system.web>
    这里设置的为720秒,前面的属性maxRequestLength一般用于用户上传文件限制大小!默认一般为4096 KB (4 MB)。