Sqldatareader可选参数

时间:2013-11-24 01:39:31

标签: c# asp.net ado.net dapper sqldatareader

我有一个datareader,它从我的存储过程中获取结果。存储过程取决于某些值,例如(“ismarried”= true)返回10个coulmns但if(“ismarried”= false)它只返回5列。

在我的asp.net页面中,我的datareader无论如何都期待10列,并且想知道我的asp.net c#代码中是否有一种方法可以使用可选参数。我知道你可以使用 SQL中的ISNULL(“列”,“)”但我没有这样做,我希望有一种方法可以告诉我的datareader这5个参数可能并不总是存在。

由于

3 个答案:

答案 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会将字段映射到您的类属性,并忽略任何缺少的字段。请注意,属性名称需要与数据库中的字段名称匹配。这将减少任何逻辑检查,并且必须手动将每个属性映射到返回的字段。

相关问题