C# 条件不起作用的SQL查询
这是我在SQL Server中输入时的查询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
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);
}
}