Mdb数据库Users表结构:
ID      自动编号
Name    姓名,字符串,不可为空
Age     年龄,数字,可为空现在要写一个“获取年龄为xx的用户”的函数,在DataSet中写入如下查询:
SELECT * FROM Users WHERE Age=?
自动生成了函数:
GetDataByAge(int? Age);获取年龄为10的用户,就用:
xx = GetDataByAge(10);获取年龄未知的用户,就用:
xx = GetDataByAge(null);  // 这里出错,无法找到任何记录但是现在问题来了,"WHERE Age=NULL"无法匹配任何记录,因为正规的写法是"WHERE Age IS NULL"
当然,我可以将年龄未知用"-1"表示。但是,现在数据库设计不能修改,年龄未知必须用null表示。那我该怎么做才能实现“获取年龄未知的用户”呢?谢谢!

解决方案 »

  1.   

    建议再窗体弄一个复选框,选中了复选框就显示jc=1
    然后SQL这样写:SELECT * FROM Users WHERE (Age=xx and {jc}!=1) or (age is null and {jc}=1){jc}用你窗体或者传入的是否要显示空年龄的标识来替换!
      

  2.   


    --
    SELECT * FROM Users WHERE IIf(IsNull([Age]),-1,[Age])=?
      

  3.   


    谢谢!但是这样还有个问题,以前用[Age]=?的时候,DataSet可以自动识别参数为int类型并生成相应代码。
    如果按照您的SQL语句,那么DataSet无法识别参数类型,会用string Param1来代替原来的int Age参数。这样一来,似乎也很不妥。
      

  4.   

    那就麻烦点在GetDataByAge(int? Age)中判断Age是否为null然后再写不同的sql语句了。
     
      

  5.   


    都是用的DataSet自动生成的代码,如果这里单独写一段,会感觉有些乱。
      

  6.   

    sql中用SELECT * FROM Users WHERE 1=1.
    然后在参数中用string型的."and Age=xx"