把你的查询语句拿出来,没有值的原因是因为在查找,这两个值为NULL的记录

解决方案 »

  1.   

    首先改写
    private void runsql(int a,string b)
    {
       if(a != null)
          this.SC_select.Parameters[0].Value=a;
       else
          this.SC_select.Parameters[0].Value=DBNull.Value;
       ......
    }其次要改写你的查询
    可以加上判断,也可以写成 select * from t where field1 like '@par1'
                         要取全部的话this.SC_select.Parameters[0].Value="%";
      

  2.   

    函数可以改为:
    private void runsql(int a,string b)
    {
       if( a != null )
         this.SC_select.Parameters[0].Value=a;
       else
         this.SC_select.Parameters[0].Value=DBNull.Value;   if( b != null )
         this.SC_select.Parameters[1].Value=b;
       else
         this.SC_select.Parameters[1].Value=DBNull.Value;
    }
      

  3.   

    runsql函数里可以判断传入的参数是不是空,空的话就不用赋值。
    另外,楼上说的也在理,存储过程也不够健壮。
      

  4.   

    //this.runsql(null,null);                 //这样会报错
    //this.runsql(DBNull.Value,DBNull.Value)  //这样也报错--->类型都不匹配,当然会报错!this.SC_select.Parameters[0].Value=DBNull.Value; //注意这里是不能给Null的
    this.SC_select.Parameters[1].Value=DBNull.Value; //同上这样给的应该是可以,数据不对,是你的存储过程的问题,
    在存储过程中判断一下,if fields is Null 
    就不用Where条件直接查出所有记录!
      

  5.   

    问题已解决了一半了,我的那个存储过程是绝对的强壮,这个我绝对放心.专门对付不定项查询的,是我的Fill()的参数错了.看来各位对问题的了解不够深入呀.to lshinningstar(网海探路) 
    函数的参数中的int类型是不能设成null来调用的!to Eddie005(暴走005) 
    你的做法不大可靠.传值,就一定要传一个明确的值过去,不然可能会有不可预料的后果;to jkflyfox(飞狐)
    估计你处理我这类问题的话用的是构建动态SQL句子来查询的 
      

  6.   

    问题我自己解决掉了,把runsql的参数全部换成string类型的了.本来从客户端那的数据也是string的,只不过把类型转换的地方给换一换就解决掉了.呵呵.各位加油哦,观察不够仔细,不过说真的,这种细节问题一般没几个人注意的.但关键时刻却是能让程序安全很多.