2013-11-24 60 views
0

我有一个datareader从我的存储过程中获取结果。存储过程取决于某些值,如(“ismarried”= true)会返回10个库仑,但如果(“ismarried”= false)返回5列。Sqldatareader可选参数

在我的asp.net页面中,我的datareader期望10列无论是什么,并想知道是否有一种方法在我的asp.net c#代码中有可选参数。我知道你可以在SQL中使用 ISNULL(“Column”,''),但是我希望有一种方法可以告诉我的数据读取器这5个参数可能并不总是存在。

感谢

+0

如果期望10列,那么你必须给它10列。 “我知道1 + 1 = 2,但我希望它= 3!” – NathanAldenSr

+0

Nathan显然你不能根据其他看起来有可能的答案来思考你的盒子外面。 – Tim

回答

1

你可以告诉该存储过程使用FieldCount属性返回多少列。如果它返回5或10,你的代码可以做出相应的反应。

+0

谢谢工作完美! – Tim

0

我所做的是动态创建查询。我使用字符串生成器来连接查询,如果某个值的值为null或为空,那么在未添加参数的代码中以及未添加条件的地方。

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(); 

短小精悍将字段映射到你的类属性,而忽略任何缺少的领域。请注意,属性名称将需要与数据库中的字段名称匹配。这将减少任何逻辑检查,并且必须手动将每个属性映射到返回的字段。