奇葩的Fill(dataSet)超时

Fill(DataSet)超时问题排查处理

 

bug复现:相同的一条语句 exec Proc_SelectTable
在数据库管理软件中执行速度很快,
但是在程序中执行很慢,

调用方法如下:

/// <summary>
/// 执行存储过程 返回DataSet
/// </summary>
/// <param name="conString">数据库连接串</param>
/// <param name="storedProcName">存储过程名</param>
/// <param name="parameters">存储过程参数</param>
/// <returns>DataSet</returns>
public static DataSet RunProcedureToDataSet(string conString, string storedProcName, IDataParameter[] parameters)
{
	using (SqlConnection connection = new SqlConnection(conString))
	{
		DataSet dataSet = new DataSet();
		connection.Open();
		SqlDataAdapter sqlDA = new SqlDataAdapter();
		sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
		sqlDA.Fill(dataSet);
		connection.Close();
		return dataSet;
	}
}

执行到 sqlDA.Fill(dataSet); 这一步就会出现超时错误,排查了程序问题和数据库语句问题,看上去都不存在干扰因素,
经过借鉴博主文章(https://blog.csdn.net/superwfei/article/details/82494273),对数据库的存储过程语句进行了换行操作
成功解决了以上问题
修改后的存储过程类似如下模式:

Create Proc Proc_SelectTable
@StartDate datetime,--开始日期
@EndDate datetime--结束日期
as
begin
	select col1
	,col2
	,col3
	,col4
	,col5
	From table
	where a=1
	and b=2
	and c=3
end

友情提示:

尽量别在数据查询中使用如下形式的查询条件,也是一个极影响查询速度的因素
F_DetectTime<= convert(datetime, '2021.02.02 23:59:59')
他会对每一行都进行一次数据类型转化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风一样的虞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值