C# 超时过期的问题有时间吗
我使用C#、.NETFramework4.0和SQLServer2008R2 Express,并用它编写了一个Winforms程序 我得到了这个信息: 操作完成前已过超时时间,或者服务器没有响应 我搜索了一下,发现了一些线索,比如 事实:C# 超时过期的问题有时间吗,c#,sql-server-2008,C#,Sql Server 2008,我使用C#、.NETFramework4.0和SQLServer2008R2 Express,并用它编写了一个Winforms程序 我得到了这个信息: 操作完成前已过超时时间,或者服务器没有响应 我搜索了一下,发现了一些线索,比如 事实: 我确实关闭了数据库连接 我已将超时设置为0 我确实应用了纠正框架 这是我的连接类(数据层): 我这样使用它(业务层): 但毕竟我做到了,为什么有时我仍然会遇到超时问题 我是否必须: 删除.ldf文件,因为它太大了 索引我的表 调整我的SQL语法 我是
- 我确实关闭了数据库连接
- 我已将超时设置为0
- 我确实应用了纠正框架
- 删除
文件,因为它太大了.ldf
- 索引我的表
- 调整我的SQL语法
DECLARE @AfterUpdate table (
NO_ORDRE_Temp int NOT NULL,
CODE_DEST_Temp varchar(50) NOT NULL,
DATE_CLOTUR_Temp datetime NOT NULL,
FA_CLIENT_Temp varchar(20) NOT NULL,
CODE_CLIENT_Temp varchar(20) NOT NULL,
MODAL_MODE_Temp char(1) NOT NULL,
MODAL_PORT_Temp bit NOT NULL,
LIVRS_EXPRS_Temp bit NOT NULL,
ENLEV_UNITE_Temp int NOT NULL,
NBR_COLIS_Temp int NOT NULL,
POID_Temp decimal(10, 2) NOT NULL,
ENLEV_CREMB_Temp decimal(10, 2) NULL,
ENLEV_DECL_Temp decimal(10, 2) NULL,
TRANSPORTEUR_Temp varchar(5) NOT NULL,
CODE_MAG_Temp varchar(50) NOT NULL,
FACTURATION_Temp int NOT NULL,
LIVRS_SIGN_Temp bit NOT NULL,
LIVRS_SAMD_Temp bit NOT NULL,
OBS_Temp varchar(max) NOT NULL,
AGENCE_Temp varchar(max) NOT NULL,
LIB_TOURNE_Temp varchar(50) NOT NULL,
DATE_CLOTUR_REEL_Temp datetime NOT NULL,
ADRESSE_Temp varchar(500) NOT NULL,
REF_EXPED_Temp varchar(20) NOT NULL
)
UPDATE ORDRE
SET STATUT_ORDRE = 2, CHAUFFEUR = @CHAUFFEUR, FACTURATION= @CHAUFFEUR, DATE_CLOTUR_REEL = @DATE_CLOTUR_REEL
OUTPUT inserted.NO_ORDRE, inserted.CODE_DEST, inserted.DATE_CLOTUR, inserted.FA_CLIENT, inserted.CODE_CLIENT, inserted.MODAL_MODE, inserted.MODAL_PORT,inserted.LIVRS_EXPRS,inserted.ENLEV_UNITE, inserted.NBR_COLIS,inserted.POID,inserted.ENLEV_CREMB,inserted.ENLEV_DECL, inserted.TRANSPORTEUR, inserted.CODE_MAG, inserted.FACTURATION, inserted.LIVRS_SIGN, inserted.LIVRS_SAMD, inserted.OBS, inserted.AGENCE, inserted.LIB_TOURNE, inserted.DATE_CLOTUR_REEL, inserted.ADRESSE, inserted.REF_EXPED INTO @AfterUpdate
WHERE STATUT_ORDRE = 1 AND (TRANSPORTEUR IN (SELECT ParsedString From dbo.ParseStringList(@Trans)))
INSERT INTO LETTRE_VOIT
OUTPUT inserted.NO_ORDRE
select rsVoit.NOID, NO_ORDRE_Temp, rsOrdre.CODE_DEST_Temp,rsOrdre.DATE_CLOTUR_Temp,rsOrdre.FA_CLIENT_Temp, rsOrdre.CODE_CLIENT_Temp, rsOrdre.MODAL_MODE_Temp, rsOrdre.MODAL_PORT_Temp,
CASE rsOrdre.MODAL_PORT_Temp
WHEN 'false' THEN N'Pay'+CHAR(233)
ELSE 'Du'
END,
rsOrdre.LIVRS_EXPRS_Temp,
CASE rsOrdre.LIVRS_EXPRS_Temp
WHEN 'false' THEN 'Express'
ELSE 'Long'
END,
rsOrdre.ENLEV_UNITE_Temp, LIBELLE, NBR_COLIS_Temp,POID_Temp,ENLEV_CREMB_Temp,ENLEV_DECL_Temp, TRANSPORTEUR_Temp, CODE_MAG_Temp, FACTURATION_Temp, LIVRS_SIGN_Temp, LIVRS_SAMD_Temp, OBS_Temp, AGENCE_Temp,LIB_TOURNE_Temp,DATE_CLOTUR_REEL_Temp,REF_EXPED_Temp
from @AfterUpdate rsOrdre
inner join
(
select CODE_DEST,MODAL_MODE, MODAL_PORT, LIVRS_EXPRS,ENLEV_UNITE,AGENCE,CODE_CLIENT,ADRESSE, ROW_NUMBER() over (order by CODE_DEST) as NOID
from ORDRE
group by CODE_DEST,MODAL_MODE,MODAL_PORT,LIVRS_EXPRS,ENLEV_UNITE,AGENCE,CODE_CLIENT,ADRESSE
) rsVoit on rsVoit.CODE_DEST = rsOrdre.CODE_DEST_Temp and rsVoit.MODAL_MODE = rsOrdre.MODAL_MODE_Temp
and rsVoit.MODAL_PORT = rsOrdre.MODAL_PORT_Temp and rsVoit.LIVRS_EXPRS = rsOrdre.LIVRS_EXPRS_Temp
and rsVoit.ENLEV_UNITE = rsOrdre.ENLEV_UNITE_Temp and rsVoit.AGENCE = rsOrdre.AGENCE_Temp
and rsVoit.CODE_CLIENT = rsOrdre.CODE_CLIENT_Temp and rsVoit.ADRESSE = rsOrdre.ADRESSE_Temp
LEFT JOIN T_UNITE ON rsOrdre.ENLEV_UNITE_Temp = T_UNITE.NOID
order by rsVoit.NOID, NO_ORDRE_Temp
另一个SQL:
SELECT *,
--FAWEB_CLIENT.RS_NOM AS RS_NOM_EXP,
--FAWEB_CLIENT.ADRESSE AS ADDR_EXP,
--FAWEB_CLIENT.CP AS CP_EXP,
--FAWEB_CLIENT.VILLE AS VILLE_EXP,
--FAWEB_CLIENT.TEL AS TEL_EXP,
--FAWEB_CLIENT.FAX AS FAX_EXP,
AGENCE.NOM AS RS_NOM_EXP,
AGENCE.ADRESSE AS ADDR_EXP,
AGENCE.CP AS CP_EXP,
AGENCE.VILLE AS VILLE_EXP,
AGENCE.TELP AS TEL_EXP,
'' AS FAX_EXP,
ORDRE.RS_NOM AS RS_NOM_DEST,
ORDRE.ADRESSE AS ADDR_DEST,
ORDRE.CP AS CP_DEST,
ORDRE.INSEE AS INSEE_DEST,
ORDRE.VILLE AS VILLE_DEST,
ORDRE.TEL AS TEL_DEST,
ORDRE.FAX AS FAX_DEST
FROM LETTRE_VOIT
LEFT JOIN AGENCE ON AGENCE.NOM = LETTRE_VOIT.LIB_AGENCE AND AGENCE.NO_CLIENT = LETTRE_VOIT.CODE_CLIENT
--LEFT JOIN FAWEB_CLIENT ON FAWEB_CLIENT.CODE_CLIENT = LETTRE_VOIT.CODE_CLIENT
LEFT JOIN ORDRE ON ORDRE.CODE_DEST = LETTRE_VOIT.CODE_DEST AND ORDRE.CODE_CLIENT = LETTRE_VOIT.CODE_CLIENT
AND ORDRE.NO_ORDRE = LETTRE_VOIT.NO_ORDRE
WHERE (LETTRE_VOIT.NO_ORDRE IN (SELECT ParsedString From dbo.ParseStringList(@Trans)))
--AND ORDRE.DATE_CLOTUR = LETTRE_VOIT.DATE_CLOTURE
我必须:(1)删除
.ldf
-不!!这样做会完全杀死您的SQL Server数据库!!不要这样做!!(2) 是的!这是根本原因-你可能有低效的查询或次优的数据库结构-这些需要修复…谢谢你马克的回答,顺便说一句。ldf只是如果我想rollbak。因此,如果我不需要执行回滚…ldf文件对我来说并不重要。我只是分离数据库,删除ldf并附加它again@Soft8Stev不要那样做!相反,您可以将恢复模式设置为“简单”,并截断日志文件。.ldf
文件对SQL Server始终至关重要!!!永远不要删除它!!!认真地要管理它的大小,您可以将数据库置于Simple
恢复模式,并且您应该定期进行事务日志备份,以检查.ldf
大小。。。。
DECLARE @AfterUpdate table (
NO_ORDRE_Temp int NOT NULL,
CODE_DEST_Temp varchar(50) NOT NULL,
DATE_CLOTUR_Temp datetime NOT NULL,
FA_CLIENT_Temp varchar(20) NOT NULL,
CODE_CLIENT_Temp varchar(20) NOT NULL,
MODAL_MODE_Temp char(1) NOT NULL,
MODAL_PORT_Temp bit NOT NULL,
LIVRS_EXPRS_Temp bit NOT NULL,
ENLEV_UNITE_Temp int NOT NULL,
NBR_COLIS_Temp int NOT NULL,
POID_Temp decimal(10, 2) NOT NULL,
ENLEV_CREMB_Temp decimal(10, 2) NULL,
ENLEV_DECL_Temp decimal(10, 2) NULL,
TRANSPORTEUR_Temp varchar(5) NOT NULL,
CODE_MAG_Temp varchar(50) NOT NULL,
FACTURATION_Temp int NOT NULL,
LIVRS_SIGN_Temp bit NOT NULL,
LIVRS_SAMD_Temp bit NOT NULL,
OBS_Temp varchar(max) NOT NULL,
AGENCE_Temp varchar(max) NOT NULL,
LIB_TOURNE_Temp varchar(50) NOT NULL,
DATE_CLOTUR_REEL_Temp datetime NOT NULL,
ADRESSE_Temp varchar(500) NOT NULL,
REF_EXPED_Temp varchar(20) NOT NULL
)
UPDATE ORDRE
SET STATUT_ORDRE = 2, CHAUFFEUR = @CHAUFFEUR, FACTURATION= @CHAUFFEUR, DATE_CLOTUR_REEL = @DATE_CLOTUR_REEL
OUTPUT inserted.NO_ORDRE, inserted.CODE_DEST, inserted.DATE_CLOTUR, inserted.FA_CLIENT, inserted.CODE_CLIENT, inserted.MODAL_MODE, inserted.MODAL_PORT,inserted.LIVRS_EXPRS,inserted.ENLEV_UNITE, inserted.NBR_COLIS,inserted.POID,inserted.ENLEV_CREMB,inserted.ENLEV_DECL, inserted.TRANSPORTEUR, inserted.CODE_MAG, inserted.FACTURATION, inserted.LIVRS_SIGN, inserted.LIVRS_SAMD, inserted.OBS, inserted.AGENCE, inserted.LIB_TOURNE, inserted.DATE_CLOTUR_REEL, inserted.ADRESSE, inserted.REF_EXPED INTO @AfterUpdate
WHERE STATUT_ORDRE = 1 AND (TRANSPORTEUR IN (SELECT ParsedString From dbo.ParseStringList(@Trans)))
INSERT INTO LETTRE_VOIT
OUTPUT inserted.NO_ORDRE
select rsVoit.NOID, NO_ORDRE_Temp, rsOrdre.CODE_DEST_Temp,rsOrdre.DATE_CLOTUR_Temp,rsOrdre.FA_CLIENT_Temp, rsOrdre.CODE_CLIENT_Temp, rsOrdre.MODAL_MODE_Temp, rsOrdre.MODAL_PORT_Temp,
CASE rsOrdre.MODAL_PORT_Temp
WHEN 'false' THEN N'Pay'+CHAR(233)
ELSE 'Du'
END,
rsOrdre.LIVRS_EXPRS_Temp,
CASE rsOrdre.LIVRS_EXPRS_Temp
WHEN 'false' THEN 'Express'
ELSE 'Long'
END,
rsOrdre.ENLEV_UNITE_Temp, LIBELLE, NBR_COLIS_Temp,POID_Temp,ENLEV_CREMB_Temp,ENLEV_DECL_Temp, TRANSPORTEUR_Temp, CODE_MAG_Temp, FACTURATION_Temp, LIVRS_SIGN_Temp, LIVRS_SAMD_Temp, OBS_Temp, AGENCE_Temp,LIB_TOURNE_Temp,DATE_CLOTUR_REEL_Temp,REF_EXPED_Temp
from @AfterUpdate rsOrdre
inner join
(
select CODE_DEST,MODAL_MODE, MODAL_PORT, LIVRS_EXPRS,ENLEV_UNITE,AGENCE,CODE_CLIENT,ADRESSE, ROW_NUMBER() over (order by CODE_DEST) as NOID
from ORDRE
group by CODE_DEST,MODAL_MODE,MODAL_PORT,LIVRS_EXPRS,ENLEV_UNITE,AGENCE,CODE_CLIENT,ADRESSE
) rsVoit on rsVoit.CODE_DEST = rsOrdre.CODE_DEST_Temp and rsVoit.MODAL_MODE = rsOrdre.MODAL_MODE_Temp
and rsVoit.MODAL_PORT = rsOrdre.MODAL_PORT_Temp and rsVoit.LIVRS_EXPRS = rsOrdre.LIVRS_EXPRS_Temp
and rsVoit.ENLEV_UNITE = rsOrdre.ENLEV_UNITE_Temp and rsVoit.AGENCE = rsOrdre.AGENCE_Temp
and rsVoit.CODE_CLIENT = rsOrdre.CODE_CLIENT_Temp and rsVoit.ADRESSE = rsOrdre.ADRESSE_Temp
LEFT JOIN T_UNITE ON rsOrdre.ENLEV_UNITE_Temp = T_UNITE.NOID
order by rsVoit.NOID, NO_ORDRE_Temp
SELECT *,
--FAWEB_CLIENT.RS_NOM AS RS_NOM_EXP,
--FAWEB_CLIENT.ADRESSE AS ADDR_EXP,
--FAWEB_CLIENT.CP AS CP_EXP,
--FAWEB_CLIENT.VILLE AS VILLE_EXP,
--FAWEB_CLIENT.TEL AS TEL_EXP,
--FAWEB_CLIENT.FAX AS FAX_EXP,
AGENCE.NOM AS RS_NOM_EXP,
AGENCE.ADRESSE AS ADDR_EXP,
AGENCE.CP AS CP_EXP,
AGENCE.VILLE AS VILLE_EXP,
AGENCE.TELP AS TEL_EXP,
'' AS FAX_EXP,
ORDRE.RS_NOM AS RS_NOM_DEST,
ORDRE.ADRESSE AS ADDR_DEST,
ORDRE.CP AS CP_DEST,
ORDRE.INSEE AS INSEE_DEST,
ORDRE.VILLE AS VILLE_DEST,
ORDRE.TEL AS TEL_DEST,
ORDRE.FAX AS FAX_DEST
FROM LETTRE_VOIT
LEFT JOIN AGENCE ON AGENCE.NOM = LETTRE_VOIT.LIB_AGENCE AND AGENCE.NO_CLIENT = LETTRE_VOIT.CODE_CLIENT
--LEFT JOIN FAWEB_CLIENT ON FAWEB_CLIENT.CODE_CLIENT = LETTRE_VOIT.CODE_CLIENT
LEFT JOIN ORDRE ON ORDRE.CODE_DEST = LETTRE_VOIT.CODE_DEST AND ORDRE.CODE_CLIENT = LETTRE_VOIT.CODE_CLIENT
AND ORDRE.NO_ORDRE = LETTRE_VOIT.NO_ORDRE
WHERE (LETTRE_VOIT.NO_ORDRE IN (SELECT ParsedString From dbo.ParseStringList(@Trans)))
--AND ORDRE.DATE_CLOTUR = LETTRE_VOIT.DATE_CLOTURE