讨论:用SQL 2K存储过程新增数据,有时写得进去,有时写不进去,怎么回事,好像SQL 2K假死?(0分)

  • 主题发起人 主题发起人 cyjsir
  • 开始时间 开始时间
C

cyjsir

Unregistered / Unconfirmed
GUEST, unregistred user!
讨论:用SQL 2K存储过程新增数据,有时写得进去,有时写不进去,怎么回事,好像SQL 2K假死?<br>具体问题:服务器数据库SQL 2K,本地数据库ACCESS,数据分为两部分:收费数据和图片(文件形式)。<br>当网络正常时,数据存储在服务器上,当网络异常时,数据保存在本地,换班时,将本地数据上传至服务器。<br>现象:网络正常时,图片能正常存储在服务器,但数据偶尔写不进数据库服务器SQL,也没在本地ACCESS,像SQL 2K假死了一样。不能正常写记录。但没有任何报错。<br>具体过程:<br>Create &nbsp;PROCEDURE sp_InsertChargeData &nbsp;<br> ( <br> @Jlh int, <br> @Tjrq datetime, <br> @Sfrq datetime, <br> @Gh varchar(50), <br> @Xm varchar(200), <br> @Qdz varchar(200), <br> @Zdz varchar(200), <br> @Cd int, <br> @Bc int, <br> @Cxdm int, <br> @Bh varchar(100), <br> @Sflb varchar(100), <br> @Cp varchar(100), <br> @Sfje money , <br> @Tx varchar(200), <br> @sCarColoKind varchar(200) <br> ) <br> AS <br> declare @nCount int <br> begin transaction <br> &nbsp;select @nCount=count(*) <br> &nbsp;from 收费表 <br> &nbsp;where (统计日期=@Tjrq) and (工号=@Gh) and (车道=@Cd) and (班次=@Bc) and (记录号=@Jlh) and (姓名=@Xm) <br> &nbsp;and (起点站=@Qdz) and (收费日期=@Sfrq) <br> &nbsp;if @nCount=0 ---数据库中不存在时 <br> &nbsp; &nbsp; insert 收费表(记录号,统计日期,收费日期,工号,姓名,起点站,终点站,车道,班次,车型代码,编号,收费类别,车牌, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;收费金额,图像,sCarColoKind) <br> &nbsp; &nbsp; values(@Jlh,@Tjrq,@Sfrq,@Gh,@Xm,@Qdz,@Zdz,@Cd,@Bc,@Cxdm,@Bh,@Sflb,@Cp,@Sfje,@Tx,@sCarColoKind) <br> &nbsp;else <br> &nbsp; &nbsp; update 收费表 set 终点站=@Zdz,车型代码=@Cxdm,编号=@Bh,收费类别=@Sflb,车牌=@Cp,收费金额=@Sfje, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;图像=@Tx,sCarColoKind=@sCarColoKind <br> &nbsp; &nbsp; where (统计日期=@Tjrq) and (工号=@Gh) and (车道=@Cd) and (班次=@Bc) and (记录号=@Jlh) and (姓名=@Xm) <br> &nbsp; &nbsp; and (起点站=@Qdz) and (收费日期=@Sfrq) <br> commit transaction <br><br>GO
 
调试一下 看看是不是有时候@nCount=NULL了
 
连续几十条数据都写不进去,不可每次@nCount都为NULL吧!
 
Create &nbsp;PROCEDURE sp_InsertChargeData &nbsp;<br> ( <br> @Jlh int, <br> @Tjrq datetime, <br> @Sfrq datetime, <br> @Gh varchar(50), <br> @Xm varchar(200), <br> @Qdz varchar(200), <br> @Zdz varchar(200), <br> @Cd int, <br> @Bc int, <br> @Cxdm int, <br> @Bh varchar(100), <br> @Sflb varchar(100), <br> @Cp varchar(100), <br> @Sfje money , <br> @Tx varchar(200), <br> @sCarColoKind varchar(200) <br> ) <br> AS <br> declare @nCount int <br> begin transaction <br> &nbsp;select @nCount=count(*) <br> &nbsp;from 收费表 <br> &nbsp;where (统计日期=@Tjrq) and (工号=@Gh) and (车道=@Cd) and (班次=@Bc) and (记录号=@Jlh) and (姓名=@Xm) <br> &nbsp;and (起点站=@Qdz) and (收费日期=@Sfrq) <br> &nbsp;if @nCount=0 ---数据库中不存在时 <br> &nbsp; &nbsp; insert 收费表(记录号,统计日期,收费日期,工号,姓名,起点站,终点站,车道,班次,车型代码,编号,收费类别,车牌, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;收费金额,图像,sCarColoKind) <br> &nbsp; &nbsp; values(@Jlh,@Tjrq,@Sfrq,@Gh,@Xm,@Qdz,@Zdz,@Cd,@Bc,@Cxdm,@Bh,@Sflb,@Cp,@Sfje,@Tx,@sCarColoKind) <br> &nbsp;else <br> &nbsp; &nbsp; update 收费表 set 终点站=@Zdz,车型代码=@Cxdm,编号=@Bh,收费类别=@Sflb,车牌=@Cp,收费金额=@Sfje, <br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;图像=@Tx,sCarColoKind=@sCarColoKind <br> &nbsp; &nbsp; where (统计日期=@Tjrq) and (工号=@Gh) and (车道=@Cd) and (班次=@Bc) and (记录号=@Jlh) and (姓名=@Xm) <br> &nbsp; &nbsp; and (起点站=@Qdz) and (收费日期=@Sfrq) <br><br>if @@error=0<br> &nbsp; commit transaction &nbsp;//没有错误才提交事务<br>else <br>begin<br> &nbsp;RAISERROR ('提交出错!', 16, 1) //该错误可以在delphi中通过try ... except ... do 来处理<br> &nbsp;ROLLBACK TRAN &nbsp;//有错误就撤消事务<br>end<br>GO<br><br>在中编程可以如下:<br>try<br>except<br> &nbsp;on:exception do<br> &nbsp;<br>end;
 
用过了try ... except ... do 的,就是没得错误提示,<br>try<br> 保存服务器<br>except<br> 保存本地<br>end
 
帮顶! <br><br>http://www.source520.com <br><br>站长开发推广同盟 站长朋友的终极驿站 <br>同时拥有海量源码电子经典书籍下载 <br><br>http://www.source520.com/search/search.asp <br><br>&quot;编程.站长&quot;论坛搜索引擎-----为中国站长注入动力!
 
把 if @nCount=0 改成<br><br>if @nCount is null or @nCount=0
 
写代码插入或者修改数据吧
 
可能是提交超时,你的数据组件的commandTimeOut设为多少?
 
接受答案了.
 
后退
顶部