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表示。那我该怎么做才能实现“获取年龄未知的用户”呢?谢谢!
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表示。那我该怎么做才能实现“获取年龄未知的用户”呢?谢谢!
然后SQL这样写:SELECT * FROM Users WHERE (Age=xx and {jc}!=1) or (age is null and {jc}=1){jc}用你窗体或者传入的是否要显示空年龄的标识来替换!
--
SELECT * FROM Users WHERE IIf(IsNull([Age]),-1,[Age])=?
谢谢!但是这样还有个问题,以前用[Age]=?的时候,DataSet可以自动识别参数为int类型并生成相应代码。
如果按照您的SQL语句,那么DataSet无法识别参数类型,会用string Param1来代替原来的int Age参数。这样一来,似乎也很不妥。
都是用的DataSet自动生成的代码,如果这里单独写一段,会感觉有些乱。
然后在参数中用string型的."and Age=xx"