.NET framework 一个关于OleDbParameters的Bug

最近在写一个简单的小应用程序,出现了一个让我头疼大半天的问题,搞到最后才弄清楚,原来是OleDbParameters的一个Bug

具体情况如下:

开始我在使用OleDbCommand进行数据库的更新操作,代码如下:

OleDbConnection _SC  =   new  OleDbConnection( this .GetConnectionString());

            
string  UpdateSQL  =   "  UPDATE Topic SET topics=@topics where fid=@fid " ;
            OleDbCommand _CMD 
=   new  OleDbCommand(UpdateSQL,_SC);

            _CMD.Parameters.Add(
" @fid " ,OleDbType.Integer).Value  =   8 ;
            _CMD.Parameters.Add(
" @topics " ,OleDbType.Integer).Value  =   28 ;

            
try  
            { 
                _SC.Open(); 
                _CMD.ExecuteNonQuery(); 
                _SC.Close(); 
            } 
            
catch (Exception ex) 
            { 
                _SC.Close(); 
                
throw  ex; 
            } 

代码执行过程中没有出错,但是数据却没有更新,于是我就采用逐步替换的方式来找原因,费了九牛二虎之力才发现个中奥妙,参数的添加居然需要和SQL语句中参数的位置一致,我Faint,将下面的代码

None.gif             _CMD.Parameters.Add( " @fid " ,OleDbType.Integer).Value  =   8 ;
None.gif            _CMD.Parameters.Add(
" @topics " ,OleDbType.Integer).Value  =   28 ;
None.gif

改成

None.gif             _CMD.Parameters.Add( " @topics " ,OleDbType.Integer).Value  =   28 ;
None.gif            _CMD.Parameters.Add(
" @fid " ,OleDbType.Integer).Value  =   8 ;
None.gif

就可以正确更新。

用Reflector查看了一下源码,大致能看清楚Framework是按照参数的顺序和具体的SQL进行的匹配,参数的名称并未发生真正的作用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值