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我也试过了,问题依旧,不知道有没有人遇见过。
------解决方案--------------------
------解决方案--------------------看看这个
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语句,就可能是连接问题,未连接到数据库。