2015-11-24 24 views
0

我需要创建一个SQL语句,可以根据选择的选项来进行调整。我有2个从数据库填充的下拉列表。基于多重下拉选择的sql语句

这里是我的ASP

<td class="theSearchTableData"> 
        <asp:UpdatePanel runat="server" ID="up_team" UpdateMode="Conditional"> 
         <ContentTemplate> 
          <asp:DropDownList runat="server" ID="ddl_team"></asp:DropDownList><%--AutoPostBack="true" OnSelectedIndexChanged="ddl_team_SelectedIndexChanged"--%> 
         </ContentTemplate> 
        </asp:UpdatePanel> 

       </td> 
       <td class="theSearchTableData"> 
        <asp:DropDownList runat="server" ID="ddl_owner"></asp:DropDownList> 
       </td> 
        <td class="theSearchTableData"> 
        <asp:DropDownList runat="server" ID="ddl_actionowner" ></asp:DropDownList> 
       </td> 

C#代码

string Owner_ActionOwner_Combo = ""; 
string ownerClause = ""; 
string ActionownerClause = ""; 

    if (ddl_owner.SelectedIndex > 0) 
    { 
     ownerClause = " log_number in (SELECT DISTINCT log_number FROM Log_Data WHERE log_owner = @logOwner) AND "; 
    } 

    if (ddl_actionowner.SelectedIndex > 0) 
    { 
     ActionownerClause = " log_number in (SELECT DISTINCT log_number FROM Log_Data WHERE log_owner <> @actionOwner and current_action_owner = @actionOwner ) AND "; 
    } 

    else if (ddl_actionowner.SelectedIndex >0 & ddl_owner.SelectedIndex > 0) 
    { 
     Owner_ActionOwner_Combo = "log_number in (SELECT DISTINCT log_number FROM Log_Data WHERE current_action_owner = @actionOwner and log_owner [email protected]) AND"; 
    } 
string completeWhereClause = ActionownerClause + Owner_ActionOwner_Combo + ownerClause; 

的 '@' 值已被参数化。

log_owner通常是action_owner,但是有一段时间log_owner与action_owner不同。这就是为什么我需要调整搜索条件。 如果用户想知道他们通过日志所有者搜索的日志所有者,并且与操作所有者相同。问题是当他们通过两者进行搜索时。

我已将此输入到我的数据库中并获取正确的数字。对于log_owner有32个,如果只action_owner有3个和组合应该有24

谢谢您的时间

+0

这并不在''ActionownerClause' log_owner <> @act似乎有必要ionOwner' – JamieD77

+0

你能详细说明你的问题吗? – user449689

+0

@ JamieD77我正在获取具有操作所有者但不是日志所有者的日志。这两个可以是相同的,但也可以在短时间内分配给其他人 –

回答

1

你有你的if语句结构转换为这个..

方式
if (ddl_owner.SelectedIndex > 0) 
{ Hit if ddl_owner.SelectedIndex > 0  } 
if (ddl_actionowner.SelectedIndex > 0) 
{ Hit if ddl_actionowner.SelectedIndex > 0  } 
else if (ddl_actionowner.SelectedIndex > 0 & ddl_owner.SelectedIndex > 0) 
{ Never hit  } 

你或许应该只是如果将你的组合顶端和使用否则,如果其他两个

string Owner_ActionOwner_Combo = ""; 
string ownerClause = ""; 
string ActionownerClause = ""; 

if (ddl_actionowner.SelectedIndex > 0 && ddl_owner.SelectedIndex > 0) 
{ 
    Owner_ActionOwner_Combo = "log_number in (SELECT DISTINCT log_number FROM Log_Data WHERE current_action_owner = @actionOwner and log_owner [email protected]) AND"; 
} 
else if (ddl_owner.SelectedIndex > 0) 
{ 
    ownerClause = " log_number in (SELECT DISTINCT log_number FROM Log_Data WHERE log_owner = @logOwner) AND "; 
} 
else if (ddl_actionowner.SelectedIndex > 0) 
{ 
    ActionownerClause = " log_number in (SELECT DISTINCT log_number FROM Log_Data WHERE current_action_owner = @actionOwner ) AND "; 
} 
string completeWhereClause = ActionownerClause + Owner_ActionOwner_Combo + ownerClause; 
+0

这是正确的做法 – user449689

+0

完美!这已经困扰我很久了!非常感谢你! –