根据ASP.net中的选择动态生成SQL查询

时间:2015-04-07 07:43:28

标签: c# asp.net sql-server-2008

我有一张桌子1:

enter image description here

和表2:

enter image description here

每个问题可以有多个选择(例如:questionId 1有两个选择选择1和2)。

我有一个表单,允许用户选择这样的多个选项:

enter image description here

还有一个答案表:

enter image description here

现在我的问题是:我想根据选择形成一个SQL查询并显示所选答案的数量。(例如:我想要将性别作为女性和教育作为1级的答案数)。我该怎么做?

我试过这样的事情:

select * from answers where (questId =2 and choiceIndex='2.0000') and (questId =3 and choiceIndex='1.0000') and someId=72

此查询不会给我正确的计数,因为相同的choiceIndex可以存在用于不同的选择。

我怎样才能做到这一点?用户也可以从表单中选择多个选项,这样我可以通过哪种方式动态生成SQL查询吗?

  

Eidt

感谢@Marc Gravell提供的解决方案。它帮助了很多。现在,一旦我实现了这一点,我想在我的查询中包含算术运算符。 (例如:我希望将性别作为女性+教育的答案数量作为1年级-等级的 select ((select COUNT(*) from answers where (questId =2 and answer='1.0000') and someId=72) + (select COUNT(*) from answers where (questId =3 and answer='1.0000') and someId=72)) 教育。

我可以在查询中包含算术运算符(+, - ,*,/,%,count,average)吗?

场景:我设计了一个表单,用户可以在其中根据数据库值生成公式。 (例如:用户将选择choice1 [female] + choice2 [grade 1] * choice3 [grade3]并生成公式将保存在DB中以供进一步使用)

我试过这样:

{{1}}

在这个查询中,我试图对两个select语句执行add操作。我可以用同样的方式做*,/,百分比等吗?

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

choiceIndex 永远不会同时成为2.00001.0000;因此,我认为你的意思是:

select * from answers where (
    (questId=2 and choiceIndex='2.0000') or
    (questId=3 and choiceIndex='1.0000')
) and someId=72

请注意,如果您要根据输入值构建查询,则应该对其进行参数化,因此它最终会显示为:

select * from answers where (
    (questId=@questId0 and choiceIndex=@choiceIndex0) or
    (questId=@questId1 and choiceIndex=@choiceIndex1)
) and someId=@someId

添加了带有值的参数:

  • @questId0 => 2
  • @questId1 => 3
  • @choiceIndex0 => '2.0000'
  • @choiceIndex1 => '3.0000'
  • @someId => 72