0自动转型到DBNull.Value引发的错误

     我们写程序的,难免要和数据库进行打交道,存储过程的参数也是在编程中经常要用到的.
     但在存储过程参数中,如果有 int 型的参数,我一般习惯于这样写:
  
None.gif create   PROCEDURE   [ dbo ] . [ usp_jf_stat_log_jifen ]  
None.gif(
None.gif    
@timebegin   datetime ,
None.gif    
@timeend   datetime ,
None.gif    
@stat       int   --    0,所有  1,添加积分   2,消费积分
None.gif
)
None.gif
AS
None.gif
begin
None.gif    
select   *   from  table1 
None.gif
end
None.gif

     在客户端调用时代码如下:
ExpandedBlockStart.gif ContractedBlock.gif             SqlParameter[] prms  =   new  SqlParameter[]  dot.gif
InBlock.gif                
new SqlParameter("@timebegin",this.tbTimeBegin.Text.Trim()),
InBlock.gif                
new SqlParameter("@timeend",this.tbTimeEnd.Text.Trim()),
InBlock.gif                
new SqlParameter("@stat",0)                              //Convert.ToInt32(this.ddlStyle.SelectedValue))
ExpandedBlockEnd.gif
            }
;
None.gif
None.gif            DataSet ds 
=  DbHelper.ExecuteDataset(DbHelper.ConnectionString, CommandType.StoredProcedure,  " usp_jf_stat_log_jifen " , prms);
None.gif
    注意红色的"0",这时,这个参数,到底是DBNull.Value 呢?还是 (int32)0 呢?  我们打开SQL Server Profiler,发现执行的如下的TSQL语句:
   
None.gif exec  usp_jf_stat_log_jifen  @timebegin = N ' 2007-05-22 ' , @timeend = N ' 2007-06-22 ' , @stat = NULL
None.gif
     是NULL,不是0.   真是一个臭虫.
     改成这样如何呢?   
None.gif                  new  SqlParameter( " @stat " ,0D)                              
    结果还是这样:
None.gif exec  usp_jf_stat_log_jifen  @timebegin = N ' 2007-05-22 ' , @timeend = N ' 2007-06-22 ' , @stat = NULL
None.gif
    最后改成这样:
None.gif                  new  SqlParameter( " @stat " ,Convert.ToInt32(0))                              
   最后结果:
None.gif exec  usp_jf_stat_log_jifen  @timebegin = N ' 2007-05-22 ' , @timeend = N ' 2007-06-22 ' , @stat =0
None.gif
   嘻嘻,终于成功了.

   本文章解决的只是一个小问题!为一个朋友解释什么是调程序,怎么调程序而写!
   哈哈!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值