2016-08-02 13 views
0

これはSQL Serverで入力したときのクエリです。SQLクエリWHERE条件が機能していない

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(); 
        } 
       } 
      } 
     } 
    } 

コードである「本部」変数は、ユーザーがドロップダウンリストを選択します別のページから転送されました。各オプションには独自の値があります。 index.aspx.csファイルで

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

、resultpage.aspx.csに転送するための変数を保存するためのコードは次のとおりです。result.aspx.csで

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

にコード変数を取得する:

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

したがって、WHERE条件が機能しない理由はわかりません。私のコーディングが間違っているか、私が逃したことがありますか?ご意見をお聞かせください。前もって感謝します。

EDIT

SQLクエリと私のデータベースの結果を比較した後、私は、変数が空であることに気づきました。データベースからデータを引き出すことができる理由は、調整中の列に空のデータがあるためです。

EDIT

ない、これは役立ちますが、私はこの問題の原因である可能性がありますエラーが発生しているかどうかを確認してください。 "名前 'DivDrop'は現在のコンテキストに存在しません"。 DivDropは、自分の価値を引き出すために使用しているドロップダウンリストです。

答えて

2

削除 'ドロップダウンリストから文字をすなわち:030、031、035、あなたのように本部を渡している999 '030' と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

私はそれをしたとがあるように思われる。このようなことにあなたの方法を変更しますクエリの結果に変更はありません。 – Brandon

1
あなたはすなわち、動作するようにあなたのコードのための3つの変更を行う必要があり

  1. あなたは、リスト項目ダウンALLドロップのValueプロパティから単一引用符( ')を削除する必要がある - <asp:ListItem Value="'030'"

  2. BindGrid()メソッドのパラメータとしてdivを渡すことはありません。

    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. 最後BindGrid()方法にクエリ文字列値を通過するPage_Loadイベントを変更します:

    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

結果は以前と同じです。私は問題が何であるか分かりません。私は自分のデータベースでデータをチェックし、div = ''を認識しました。これは、コードがドロップダウンリストから値を取得したことを明確に示しているので、私は混乱していますが、値はありませんでした。 – Brandon

+0

あなたのコードにブレークポイントを置き、それをデバッグします。 'using(SqlCommand cmd = new SqlCommand( "SELECT TOP 100 * FROM [dbo]。[F4101] WHERE IMSRP3 ='" + div + SQL Server Management Studioに貼り付け、結果が返ってくるかどうか確認してください。 –

+0

既にデバッグしようとしていて、SQL Sever Management Studioでコードを試しました。残念ながら、このコードはManagement Studioで動作します。だから私の推測変数は空であるだろう。私が調整した列については、その中に空のデータがあります。 – Brandon

関連する問題