C# 条件不起作用的SQL查询

C# 条件不起作用的SQL查询,c#,asp.net,C#,Asp.net,这是我在SQL Server中输入时的查询 SELECT * FROM CSPJDE.DBO.Emp WHERE Dept = '010' 这是aspx.cs文件中的代码 private void BindGrid() { string strConnString = ConfigurationManager.ConnectionStrings["SQL"].ConnectionString; using (SqlConnection con = new

这是我在SQL Server中输入时的查询

SELECT * FROM CSPJDE.DBO.Emp WHERE Dept = '010'
这是aspx.cs文件中的代码

private void BindGrid()
    {
        string strConnString = ConfigurationManager.ConnectionStrings["SQL"].ConnectionString;
        using (SqlConnection con = new SqlConnection(strConnString))
        {
            using (SqlCommand cmd = new SqlCommand("SELECT TOP 100 * FROM [dbo].[F4101] WHERE IMSRP3 ='"+Div+"'"))
            {
                using (SqlDataAdapter sda = new SqlDataAdapter())
                {
                    cmd.Connection = con;
                    sda.SelectCommand = cmd;
                    using (DataTable dt = new DataTable())
                    {
                        sda.Fill(dt);
                        GridView1.DataSource = dt;
                        GridView1.DataBind();
                    }
                }
            }
        }
    }
Div变量是从用户将选择下拉列表的另一个页面传输的。每个选项都有自己的价值

 <asp:DropDownList ID="DivDrop" runat="server" CssClass="auto-style1">
        <asp:ListItem Value="010" Selected="True">(010) CAL</asp:ListItem>
        <asp:ListItem Value="020">(020) Sales</asp:ListItem>
        <asp:ListItem Value="'030'">(030) Marketing</asp:ListItem>
        <asp:ListItem Value="'031'">(031) Admin</asp:ListItem>
        <asp:ListItem Value="'035'">(035) Accounting</asp:ListItem>
        <asp:ListItem Value="'999'">ALL</asp:ListItem>
    </asp:DropDownList>
在result.aspx.cs中,检索变量的代码为:

 public void Page_Load(object sender, EventArgs e)
    {
        if (Request.QueryString["Value"] != null)
        {
           string Div = Request.QueryString["Value"].ToString();
        }
        if (!IsPostBack)
        {
            this.BindGrid();
        }
    }
因此,我不确定WHERE条件为什么不起作用。我的编码是错误的还是遗漏了什么?请给我一些建议。提前谢谢

编辑

在比较了SQL查询的结果和我的数据库之后,我意识到变量是空的。它仍然能够从数据库中提取数据的原因是,我正在处理的列中有空数据

编辑


不确定这是否会有帮助,但我有一个错误,这可能是这个问题的原因。当前上下文中不存在名称“DivDrop”。DivDrop是我用来获取值的下拉列表。

从下拉列表中删除“字符”,即:030、031、035、999。您将Div作为“030”传递,并将转换为IMSRP3=030

<asp:DropDownList ID="DivDrop" runat="server" CssClass="auto-style1">
    <asp:ListItem Value="010" Selected="True">(010) CAL</asp:ListItem>
    <asp:ListItem Value="020">(020) Sales</asp:ListItem>
    <asp:ListItem Value="'030'">(030) Marketing</asp:ListItem>
    <asp:ListItem Value="'031'">(031) Admin</asp:ListItem>
    <asp:ListItem Value="'035'">(035) Accounting</asp:ListItem>
    <asp:ListItem Value="'999'">ALL</asp:ListItem>
</asp:DropDownList>

从下拉列表中删除“”字符,即:030、031、035、999。您将Div作为“030”传递,并将转换为IMSRP3=030

<asp:DropDownList ID="DivDrop" runat="server" CssClass="auto-style1">
    <asp:ListItem Value="010" Selected="True">(010) CAL</asp:ListItem>
    <asp:ListItem Value="020">(020) Sales</asp:ListItem>
    <asp:ListItem Value="'030'">(030) Marketing</asp:ListItem>
    <asp:ListItem Value="'031'">(031) Admin</asp:ListItem>
    <asp:ListItem Value="'035'">(035) Accounting</asp:ListItem>
    <asp:ListItem Value="'999'">ALL</asp:ListItem>
</asp:DropDownList>

要使代码正常工作,您需要进行三项更改,即:


您需要从所有下拉列表项的Value属性中删除单引号字符-要使代码正常工作,您需要进行三项更改,即:


您需要从所有下拉列表项的Value属性中删除单引号字符-结果仍然与以前相同。我不确定是什么问题。我用数据库检查了数据,发现div=。这就是我感到困惑的地方,因为代码清楚地显示它从下拉列表中获取了值,但是没有值。在代码处放置一个断点并调试它。以使用[dbo]中的SqlCommand cmd=new SqlCommandSELECT TOP 100*生成的SQL查询为例。[F4101]其中IMSRP3='+div+',并将其粘贴到SQL Server Management Studio中,查看是否返回任何结果。了解调试代码我已经尝试过调试它,并在SQL Server Management Studio中尝试过该代码。不幸的是,代码在管理工作室中工作。所以我猜这个变量是空的。对于我已设置条件的列,其中有空数据。如果您尝试调试它,那么为什么要猜测变量是否为空?调试器将向您显示答案。如果查询在SQL中工作并返回数据,那么现在将在CRight中返回相同的数据,我确信这个变量是空的,我正在试图找出原因。尽管如此,我已经在下拉列表中选择了一个有值的选项。结果仍然和以前一样。我不确定是什么问题。我用数据库检查了数据,发现div=。这就是我感到困惑的地方,因为代码清楚地显示它从下拉列表中获取了值,但是没有值。在代码处放置一个断点并调试它。以使用[dbo]中的SqlCommand cmd=new SqlCommandSELECT TOP 100*生成的SQL查询为例。[F4101]其中IMSRP3='+div+',并将其粘贴到SQL Server Management Studio中,查看是否返回任何结果。了解调试代码我已经尝试过调试它,并在SQL Server Management Studio中尝试过该代码。不幸的是,代码在管理工作室中工作。所以我猜这个变量是空的。对于我已设置条件的列,其中有空数据。如果您尝试调试它,那么为什么要猜测变量是否为空?调试器将向您显示答案。如果查询在SQL中工作并返回数据,那么现在将在CRight中返回相同的数据,我确信这个变量是空的,我正在试图找出原因。尽管如此,我已经在下拉列表中选择了包含值的选项。我这样做了,查询结果似乎没有更改。我这样做了,查询结果似乎没有更改。
private void BindGrid(string div)
{
    string strConnString = ConfigurationManager.ConnectionStrings["SQL"].ConnectionString;
    using (SqlConnection con = new SqlConnection(strConnString))
    {
        using (SqlCommand cmd = new SqlCommand("SELECT TOP 100 * FROM [dbo].[F4101] WHERE IMSRP3 ='" + div + "'"))
        {
            using (SqlDataAdapter sda = new SqlDataAdapter())
            {
                cmd.Connection = con;
                sda.SelectCommand = cmd;
                using (DataTable dt = new DataTable())
                {
                    sda.Fill(dt);
                    GridView1.DataSource = dt;
                    GridView1.DataBind();
                }
            }
        }
    }
}
public void Page_Load(object sender, EventArgs e)
{
    string Div = String.Empty;

    if (Request.QueryString["Value"] != null)
    {
        Div = Request.QueryString["Value"].ToString();
    }

    if (!IsPostBack)
    {
         this.BindGrid(Div);
    }
}