【问题标题】:Select statement only searches by check boxes when kept in the where statement选择语句仅在保存在 where 语句中时按复选框搜索
【发布时间】:2017-11-16 06:11:41
【问题描述】:

我在winform 中有21 个textboxes 和2​​5 个checkboxes,我希望能够输入这些textboxes 并检查checkboxes 并在执行语句时返回相应的记录。此时,每当我有一个在 where 子句中没有引用 checkboxes 的 select 语句时,我可以通过任何 textbox 搜索并正常返回我的记录,但是当我通过 checkbox 添加搜索时,不会返回任何记录除了选中某些checkboxes 的那些。因此,如果我在 textboxes 中输入任何内容并且没有检查 checkbox ,我仍然会收到 no record found 消息。

{


        con.Open();
        string str = "select * from engineering where (JobNumber like '%' + @search + '%' AND DateOrdered
        like '%' + @search1 + '%' AND Title like '%' + @search2 + '%' AND PhysicalAddressComplete like 
        '%' + @search3 + '%' AND County like '%' + @search4 + '%' AND Client like '%' + @search5 + '%' 
        AND Contact like '%' + @search6 + '%' AND ContactTitle like '%' + @search7 + '%' AND 
        MailingAddressComplete like '%' + @search8 + '%' AND BusinessPhone like '%' + @search9 + '%' 
        AND CellPhone like '%' + @search10 + '%' AND Email like '%' + @search11 + '%' AND OpenStatus 
        like '%' + @search12 + '%' AND CloseStatus like '%' + @search13 + '%' AND Cabinet 
        like '%' + @search14 + '%' AND Roll like '%' + @search15 + '%' AND Drawer like '%' + @search16 + '%' 
        AND ConstructionDrawings like '%' + @search17 + '%' AND Fee like '%' + @search18 + '%' AND 
        ConstructionCost like '%' + @search19 + '%' AND ProjectDescription like '%' + @search20 + '%' 
        AND DesignBuild like " + DesignBuild + " )";
        SqlCommand xp = new SqlCommand(str, con);
        xp.Parameters.Add("@search", SqlDbType.NVarChar).Value = txtProjectNumber.Text;
        xp.Parameters.Add("@search1", SqlDbType.NVarChar).Value = txtDateOrdered.Text;
        xp.Parameters.Add("@search2", SqlDbType.NVarChar).Value = txtProjectName.Text;
        xp.Parameters.Add("@search3", SqlDbType.NVarChar).Value = txtProjectAddress.Text;
        xp.Parameters.Add("@search4", SqlDbType.NVarChar).Value = txtCounty.Text;
        xp.Parameters.Add("@search5", SqlDbType.NVarChar).Value = txtClient.Text;
        xp.Parameters.Add("@search6", SqlDbType.NVarChar).Value = txtClientContact.Text;
        xp.Parameters.Add("@search7", SqlDbType.NVarChar).Value = txtContactTitle.Text;
        xp.Parameters.Add("@search8", SqlDbType.NVarChar).Value = txtBillingAddress.Text;
        xp.Parameters.Add("@search9", SqlDbType.NVarChar).Value = txtBusinessPhone.Text;
        xp.Parameters.Add("@search10", SqlDbType.NVarChar).Value = txtCellPhone.Text;
        xp.Parameters.Add("@search11", SqlDbType.NVarChar).Value = txtEmail.Text;
        xp.Parameters.Add("@search12", SqlDbType.NVarChar).Value = txtOpenStatus.Text;
        xp.Parameters.Add("@search13", SqlDbType.NVarChar).Value = txtCloseStatus.Text;
        xp.Parameters.Add("@search14", SqlDbType.NVarChar).Value = txtCabinet.Text;
        xp.Parameters.Add("@search15", SqlDbType.NVarChar).Value = txtRoll.Text;
        xp.Parameters.Add("@search16", SqlDbType.NVarChar).Value = txtDrawer.Text;
        xp.Parameters.Add("@search17", SqlDbType.NVarChar).Value = txtDrawings.Text;
        xp.Parameters.Add("@search18", SqlDbType.NVarChar).Value = txtFee.Text;
        xp.Parameters.Add("@search19", SqlDbType.NVarChar).Value = txtCost.Text;
        xp.Parameters.Add("@search20", SqlDbType.NVarChar).Value = txtProjectDescription.Text;

        try
        {


            da = new SqlDataAdapter();
            da.SelectCommand = xp;
            da.Fill(ss);


            Showdata(pos);
          if (ss.Rows.Count >0)
            {

                this.chkEducational.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Education"] == 1);
                this.chkDesign.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["DesignBuild"] == 1);
                this.chkMedical.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Medical"] == 1);
                this.chkReligious.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Religious"] == 1);
                this.chkMulti.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["MultiFamily"] == 1);
                this.chkStudent.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Student"] == 1);
                this.chkAssisted.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Assisted"] == 1);
                this.chkSingleFamily.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Single"] == 1);
                this.chkBridge.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Bridge"] == 1);
                this.chkIntersection.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Intersection"] == 1);
                this.chkRoadway.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Roadway"] == 1);
                this.chkTransOther.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["TransportationOther"] == 1);
                this.chkRetailSmall.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["SmallRetail"] == 1);
                this.chkRetailLarge.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["LargeRetail"] == 1);
                this.chkParks.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Parks"] == 1);
                this.chkIndustrial.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Industrial"] == 1);
                this.chkUtility.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Utility"] == 1);
                this.chkGCSmall.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["GCSmall"] == 1);
                this.chkGCLarge.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["GCLarge"] == 1);
                this.chkOffice.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Office"] == 1);
                this.chkOther.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Other"] == 1);
                this.chkMunicipal.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Municipal"] == 1);
                this.chkPrivate.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Privates"] == 1);
                this.chkInstitutional.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Institutional"] == 1);
                this.chkMilitary.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Military"] == 1);


            }

        }
        catch
        {
            MessageBox.Show("No Record Found");

        }


        con.Close();

    }

但是,即使我没有在 where 子句中包含复选框,我仍然会得到 "no record found message" ,然后一旦我点击该消息框,我的结果就会显示出来。对这两个问题中的任何一个都有帮助。

【问题讨论】:

  • 尝试显示异常消息而不是自定义消息(例如e.Message)。通过在 catch 子句中设置断点,可以在调试时获取异常详情。

标签: c# asp.net entity-framework linq


【解决方案1】:

您是否尝试过在检查if (ss.Rows.Count >0)的地方调试代码

this.chkEducational.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Education"] == 1);
                this.chkDesign.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["DesignBuild"] == 1);
                this.chkMedical.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Medical"] == 1);
                this.chkReligious.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Religious"] == 1);
                this.chkMulti.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["MultiFamily"] == 1);
                this.chkStudent.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Student"] == 1);
                this.chkAssisted.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Assisted"] == 1);
                this.chkSingleFamily.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Single"] == 1);
                this.chkBridge.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Bridge"] == 1);
                this.chkIntersection.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Intersection"] == 1);
                this.chkRoadway.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Roadway"] == 1);
                this.chkTransOther.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["TransportationOther"] == 1);
                this.chkRetailSmall.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["SmallRetail"] == 1);
                this.chkRetailLarge.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["LargeRetail"] == 1);
                this.chkParks.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Parks"] == 1);
                this.chkIndustrial.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Industrial"] == 1);
                this.chkUtility.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Utility"] == 1);
                this.chkGCSmall.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["GCSmall"] == 1);
                this.chkGCLarge.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["GCLarge"] == 1);
                this.chkOffice.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Office"] == 1);
                this.chkOther.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Other"] == 1);
                this.chkMunicipal.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Municipal"] == 1);
                this.chkPrivate.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Privates"] == 1);
                this.chkInstitutional.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Institutional"] == 1);
                this.chkMilitary.Checked = ((int)ss.AsEnumerable().FirstOrDefault()["Military"] == 1);

您的代码在某处中断,这就是它显示错误的原因。

您能否分享屏幕截图和数据集中的数据ss

【讨论】:

  • 看我的查询,当你看到操作数AND时,表示必须满足所有条件才能返回结果。我所做的是尝试使用 SQL 管理器并使用该命令堆栈运行查询以查看我期望的结果。如果我没有得到任何结果,则查询过于严格。
  • 你已经在 catch 中应用了消息框,这意味着发生了一些异常,它会显示消息。您需要调试复选框部分。
猜你喜欢
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多