C# 从C应用程序连接到SQL数据库时,我收到消息“Timeout expired..”
我写了一个销售管理软件。它可以很好地处理几乎所有函数,这意味着连接字符串是正确的,除了只有一个函数生产计划。当我点击按钮执行此功能时,会收到一条错误消息超时过期。操作完成前已过超时时间,或者服务器没有响应 在这个函数中,我调用了一个存储过程,并在SQLManagementStudio中对其进行了测试,它在0.2秒内运行良好,速度很快 请帮我找出一个解决办法。提前感谢! 以下是我的存储过程:C# 从C应用程序连接到SQL数据库时,我收到消息“Timeout expired..”,c#,sql-server,ado.net,sqlconnection,C#,Sql Server,Ado.net,Sqlconnection,我写了一个销售管理软件。它可以很好地处理几乎所有函数,这意味着连接字符串是正确的,除了只有一个函数生产计划。当我点击按钮执行此功能时,会收到一条错误消息超时过期。操作完成前已过超时时间,或者服务器没有响应 在这个函数中,我调用了一个存储过程,并在SQLManagementStudio中对其进行了测试,它在0.2秒内运行良好,速度很快 请帮我找出一个解决办法。提前感谢! 以下是我的存储过程: CREATE proc [dbo].[SPChiTietKeHoachGiao] (@makhg nvar
CREATE proc [dbo].[SPChiTietKeHoachGiao] (@makhg nvarchar(15))
as
begin
declare @ngay datetime, @thang int, @nam int,
@ngay1 datetime, @thang1 int, @nam1 int,
@ngay2 datetime, @thang2 int, @nam2 int,
@ngay3 datetime, @thang3 int, @nam3 int,
@ngay4 datetime, @thang4 int, @nam4 int
-- Lay tinh hinh tieu thu cua thang truoc
select top 1
@ngay=dateadd(month, -1,Thang)
from KeHoachGiao
where MaKeHoachGiao = @makhg
set @thang = month(@ngay)
set @nam = year(@ngay)
set @ngay1=dateadd(MONTH,-1,@ngay)
set @ngay2=dateadd(MONTH,-1,@ngay1)
set @ngay3=dateadd(MONTH,-1,@ngay2)
set @ngay4=dateadd(MONTH,-1,@ngay3)
set @thang1=month(@ngay1)
set @nam1=year(@ngay1)
set @thang2=month(@ngay2)
set @nam2=year(@ngay2)
set @thang3=month(@ngay3)
set @nam3=year(@ngay3)
set @thang4=month(@ngay4)
set @nam4=year(@ngay4)
select ct.MaSP,
TenSP,
xuatkho4.TieuThuTrongThang4,
xuatkho3.TieuThuTrongThang3,
xuatkho2.TieuThuTrongThang2,
xuatkho1.TieuThuTrongThang1,
(
ISNULL ( TieuThuTrongThang4, 0 )
+ISNULL ( TieuThuTrongThang3, 0 )
+ISNULL ( TieuThuTrongThang2, 0 )
+ISNULL ( TieuThuTrongThang1, 0 ) ) / 4 TTBQ,
TonDauKy,
NhapKhoTrongThang,
xuatkho.TieuThuTrongThang,
TonCuoiKy,
case KeHoachSanXuat
when 0 then null else KeHoachSanXuat end KeHoachSanXuat,
KeHoachSanXuat * DinhMuc / 1000000 SanLuong,
case SoLuongDaNhap
when 0 then null else SoLuongDaNhap end SoLuongDaNhap,
case isnull( KeHoachSanXuat, 0 )
when 0 then null
else 100 * SoLuongDaNhap / isnull ( KeHoachSanXuat, 100) end TiLeHoanThanh
from (
select * from ChiTietKeHoachGiao where makehoachgiao = @makhg) ct
inner join
(
select masp
, tensp
, stt
, MaLoai
, DinhMuc
from SanPham
) sp
ON ct.MaSP = sp.MaSP
left join
(
select ctpx.MaSP
, SUM( ctpx.SoLuong ) TieuThuTrongThang
from
(
select * from PhieuXuatKho
where MONTH(NgayXuat)= @thang
and YEAR(NgayXuat) = @nam
) pxk
inner join ChiTietXuatKho ctpx
on pxk.MaPhieuXuat = ctpx.MaPhieuXuat
group by ctpx.MaSP
) xuatkho
on sp.MaSP = xuatkho.MaSP
left join
(
select ctpx.MaSP
, sum(ctpx.SoLuong) TieuThuTrongThang1
from
( select * from PhieuXuatKho
where MONTH(NgayXuat) = @thang1
and YEAR ( NgayXuat) = @nam1
) pxk
inner join ChiTietXuatKho ctpx
on pxk.MaPhieuXuat = ctpx.MaPhieuXuat
group by ctpx.MaSP
) xuatkho1
on sp.MaSP = xuatkho1.MaSP
left join
(
select ctpx.MaSP
, sum ( ctpx.SoLuong ) TieuThuTrongThang2
from
(
select * from PhieuXuatKho
where MONTH ( NgayXuat) = @thang2
and YEAR ( NgayXuat)= @nam2
) pxk
inner join ChiTietXuatKho ctpx
on pxk.MaPhieuXuat = ctpx.MaPhieuXuat
group by ctpx.MaSP
) xuatkho2
on sp.MaSP = xuatkho2.MaSP
left join
(
select ctpx.MaSP
, sum ( ctpx.SoLuong ) TieuThuTrongThang3
from
(
select * from PhieuXuatKho
where MONTH ( NgayXuat ) = @thang3
and YEAR ( NgayXuat ) = @nam3
) pxk
inner join ChiTietXuatKho ctpx
on pxk.MaPhieuXuat = ctpx.MaPhieuXuat
group by ctpx.MaSP
) xuatkho3
on sp.MaSP = xuatkho3.MaSP
left join
(
select ctpx.MaSP
, sum(ctpx.SoLuong) TieuThuTrongThang4
from
(
select * from PhieuXuatKho
where MONTH(NgayXuat) = @thang4
and YEAR(NgayXuat) = @nam4
) pxk
inner join ChiTietXuatKho ctpx
on pxk.MaPhieuXuat = ctpx.MaPhieuXuat
group by ctpx.MaSP
) xuatkho4
on sp.MaSP = xuatkho4.MaSP
inner join
(
select maloai
, tenloai
from loaisanpham
) loai
on sp.maloai = loai.maloai
order by loai.tenloai
, sp.STT
end
我曾经遇到过这样的问题,解决方法是重新编译SP。 您可以通过在参数声明和AS关键字之间添加WITH RECOMPILE来实现这一点,或者使用sp_RECOMPILE sp。希望这对您有所帮助
请显示您的代码,用foo替换应该与世界共享的任何内容。请共享您正在使用/调用该存储过程的代码。那么,CSharp代码在哪里?你真的确定这段代码可以在0.2秒内处理一组记录吗?谢谢!我重新编译了这个SP,但当我从代码中调用SP时,它仍然运行得太慢了大约4分钟,在SQL Management Studio中运行时,它的运行速度仍然太慢了0.2秒。我显示了查询计划并得到消息:缺少索引影响17.1137。运行SQL Profiler并检查正在运行的确切查询,然后在SQL Server Studio中尝试。很可能您需要添加缺少的索引并尝试优化SP