2016-08-02 15 views
0

Dies ist die Abfrage, wenn ich in SQL Server eingeben.SQL-Abfrage WHERE-Bedingung funktioniert nicht

SELECT * FROM CSPJDE.DBO.Emp WHERE Dept = '010' 

Dies ist der Code in den 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(); 
        } 
       } 
      } 
     } 
    } 

Die "Div" Datei Variable von einer anderen Seite übertragen wurde, wo der Benutzer die Dropdown-Liste ausgewählt werden. Jede Option hat ihren eigenen Wert.

<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> 

In der index.aspx.cs Datei, der Code die Variable für die Übertragung zu resultpage.aspx.cs zu retten ist:

protected void RunButton_Click(object sender, EventArgs e) 
    { 
     Response.Redirect("ResultPage.aspx?Value="+DivDrop.SelectedValue); 
    } 

In dem result.aspx.cs, der Code die Variable abrufen lautet:

public void Page_Load(object sender, EventArgs e) 
    { 
     if (Request.QueryString["Value"] != null) 
     { 
      string Div = Request.QueryString["Value"].ToString(); 
     } 
     if (!IsPostBack) 
     { 
      this.BindGrid(); 
     } 
    } 

So bin ich mir nicht sicher, warum die WHERE-Bedingung nicht funktioniert. Ist meine Codierung falsch oder gibt es etwas, was ich verpasst habe? Bitte um Rat. Danke im Voraus.

EDIT

Nach dem Ergebnis der SQL-Abfrage und meiner Datenbank zu vergleichen, wurde mir klar, dass die Variable leer ist. Der Grund, warum es immer noch in der Lage ist, Daten aus der Datenbank zu extrahieren, liegt darin, dass in der Spalte, die ich aufbereite, leere Daten vorhanden sind.

EDIT

Nicht sicher, ob dies helfen wird, aber ich einen Fehler haben, die die Ursache für dieses Problem sein könnte. "Der Name 'DivDrop' existiert im aktuellen Kontext nicht". DivDrop ist die Dropdown-Liste, die ich verwende, um meinen Wert zu erhalten.

Antwort

2

Entfernen Sie die 'Zeichen aus dem Dropdownlist, dh: 030, 031, 035, 999. Sie sind vorbei Div als '030' und wird übersetzt werden WHERE 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> 
+0

ich tat, und es scheint zu sein, keine Änderung am Ergebnis der Abfrage. – Brandon

1

Sie müssen drei Änderungen vornehmen für Ihren Code zu arbeiten, und zwar:

  1. Sie müssen die Apostrophe (') von der Value Eigenschaft aller der Dropdown-Liste Elemente entfernen - <asp:ListItem Value="'030'"

  2. Sie übergeben div nicht als Parameter an die Methode . Ändern Sie Ihre Methode wie folgt zu sein:

    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(); 
           } 
          } 
         } 
        } 
    } 
    
  3. schließlich das Page_Load Ereignis ändern die Query-String-Wert durchlaufen zum BindGrid() Methode:

    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); 
        } 
    } 
    
+0

Das Ergebnis ist immer noch das gleiche wie zuvor. Ich bin mir nicht sicher, was das Problem ist. Ich überprüfte die Daten mit meiner Datenbank und erkannte, dass div = ''.Dies ist, wo ich verwirrt bin, da der Code deutlich zeigt, dass es den Wert aus der Dropdown-Liste erfasst hat, jedoch gab es keinen Wert. – Brandon

+0

Platzieren Sie einen Breakpoint an Ihrem Code und debuggen Sie ihn. Nehmen Sie die SQL-Abfrage, die durch 'using erzeugt wird (SqlCommand cmd = neuer SqlCommand (" SELECT TOP 100 * FROM [dbo]. [F4101] WHERE IMSRP3 = '"+ div +) "'")) 'und fügen Sie es in SQL Server Management Studio und sehen, ob es irgendwelche Ergebnisse zurückgibt. Lernen Sie, Ihren Code zu debuggen –

+0

Ich habe bereits versucht, es zu debuggen und versuchte den Code in SQL Server Management Studio. Leider funktioniert der Code im Management Studio. Also meine Vermutung wäre, dass die Variable leer ist. Für die Spalte, die ich konditioniert habe, sind leere Daten drin. – Brandon

Verwandte Themen