日期:2014-05-18  浏览次数:22179 次

SqlDataAdapter.Fill()的时候超时
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我也试过了,问题依旧,不知道有没有人遇见过。

------解决方案--------------------
探讨

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


public DataTable GetDataSet(string sql, params SqlParameter[] values)
{
using (SqlCommand cmd = new SqlCommand(sql, Connection))
{
……

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


------解决方案--------------------
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);

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