我有一个datareader,它从我的存储过程中获取结果。存储过程取决于某些值,例如(“ismarried”= true)返回10个coulmns但if(“ismarried”= false)它只返回5列。
在我的asp.net页面中,我的datareader无论如何都期待10列,并且想知道我的asp.net c#代码中是否有一种方法可以使用可选参数。我知道你可以使用 SQL中的ISNULL(“列”,“)”但我没有这样做,我希望有一种方法可以告诉我的datareader这5个参数可能并不总是存在。
由于
答案 0 :(得分:1)
您可以使用FieldCount
属性判断存储过程返回的列数。如果它返回5或10,您的代码可以做出相应的反应。
答案 1 :(得分:0)
我所做的是动态创建查询。我使用字符串构建器来连接查询,如果值以null或空到达,则在未添加参数的代码中以及未添加条件的位置。
答案 2 :(得分:0)
不是检查返回的列,然后根据字段数等进行映射,更简洁的解决方案是创建一个类,让我们说像这样的人......
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsMarried { get; set; }
//etc...
}
然后,您可以使用dapper
返回结果...
var people = cnn.Query<Person>("spName",
commandType: CommandType.StoredProcedure).ToList();
dapper会将字段映射到您的类属性,并忽略任何缺少的字段。请注意,属性名称需要与数据库中的字段名称匹配。这将减少任何逻辑检查,并且必须手动将每个属性映射到返回的字段。