另一个SqlParameterCollection 中已包含 SqlParameter

自从用了sqlHelper后就时不时的出现这个问题,想来想去是不是SQL缓存了(个人理解),于是,修改了sqlHelper类,增加了一个方法和几句代码

 

Code
// 增加了一个属性,把原本全过程传递参数改为对象传递
         public  SqlParameter[] Parameters
        {
            
set
            {
                parameters 
=  value;
            }
            
get
            {
                
return  parameters;
            }
        }

 

 

 

// 继承IDisponse接口,实现了IDisponse()方法,将Parameters设置为null
         public   void  Dispose()
        {
            parameters 
=   null ;
            commandText 
=   null ;
            conntctionString 
=   null ;
        }

 

 

 

// 完成SQL后将Parameters清除还不够,要设置为空,错误后也要设置为空,因为是先设置好参数,才开始查询,就算查询失败,参数还是被传递进去了
         public  SqlDataReader ExecuteReader()
        {
            SqlCommand cmd 
=   new  SqlCommand();
            SqlConnection conn 
=   new  SqlConnection(conntctionString);
            
try
            {
                PrepareCommand(cmd, conn, 
null , commandType, commandText, parameters);
                SqlDataReader rdr 
=  cmd.ExecuteReader(CommandBehavior.CloseConnection);
                cmd.Parameters.Clear();
                cmd.Dispose();
                parameters 
=   null ; // 设置参数为null
                 return  rdr;
            }
            
catch
            {
                conn.Close();
                
this .Dispose(); // 清除参数
                 throw ;
            }
        }

 

本来这个样子好了很多,可是偶尔还是会,例如数据库出错,下次打开就会错误,估计就是SQL或者ado.net把参数或者对象缓存了

 

 

// 在构造函数里面将parameters设置为null

        
public  MSSQLHelper()
        {
            parameters 
=   null ;
        }

 

 

如此折腾了一翻,暂时没问题

你可能感兴趣的:(Collection)