2012-02-29 8 views
0

DBからデータを取得しようとしている.aspx WebページのListBoxがあります。クエリはストアドプロシージャの形式であり、以下は私が使用しているListBind(string queryPart)メソッドです。質問後にListBoxにデータが届かない

private void ListBind(string queryPart) 
{ 
    SqlDataAdapter adp = new SqlDataAdapter("Retrieve", ConfigurationManager.ConnectionStrings["cn"].ConnectionString); 
       DataSet ds = new DataSet(); 
       adp.SelectCommand.CommandType = CommandType.StoredProcedure; 
       adp.SelectCommand.Parameters.Add("@s1", SqlDbType.NVarChar, 255).Value = queryPart; 
       adp.SelectCommand.Parameters.Add("@s2", SqlDbType.NVarChar, 255).Value = DropDownList1.SelectedItem.ToString(); 
       adp.Fill(ds); 
       ListBox1.DataSource = ds; 
       ListBox1.DataBind(); 
} 

問題は、私のリストボックスにデータを取得せず、エラーがなく空のままであることです。私の入れているブレークポイントを見つけようとしましたが、理由を見つけることができませんでした。

私のWebページの別のドロップダウンリストをバインドするためのパラメータを持たない別のプロシージャを使用し、正常に動作している同様のメソッドがあります。ここでは何かが間違っています。助言がありますか?

+0

あなたはListBindの中にブレークポイントを追加してヒットしなかったと言いますか?もしそうならListBindが呼び出されていますか?それは内部にはありません!Page.IsPostBackかそれとも何か? – Greg

+0

これは明らかですが、クエリが空のセットを返さないと確信していますか?問題がコード内にあることを確認したいだけです。 (実際にこれをコメント以上に回答したいと思っています) – Harbie

答えて

0

SQLプロファイラを使用してプロシージャ呼び出しを監視し、実際に使用しているパラメータを確認し、SSMSで直接実行することができます。同様に、パラメータを割り当てた後でブレークします。

しかし、私はそれが選択された項目のパラメータだと思います。あなたが他の選択されたプロパティ(SelectedValueなど)のいずれかを表示したい場合は、それが設定されていません。

+0

私はSQLプロファイラを探していましたが、これはSSMS Expressで利用できますか? – Cipher

+0

いいえ、そうではありません。だから、デバッグのアプローチを使用してください。あなたが問題を抱えている場合は、そのページの一時的なコントロールにコンテンツを書き出すことができます。 – kaj

+0

SQL Expressでは、これをhttps://sites.google.com/site/sqlprofiler/のプロファイリングに使用します。 – PraveenVenu

0

以下に変更して試していただけますか?

private void ListBind(string queryPart) 
{ 
    SqlDataAdapter adp = new SqlDataAdapter("Retrieve", ConfigurationManager.ConnectionStrings["cn"].ConnectionString); 
       DataTable dt = new DataTable(); 
       adp.SelectCommand.CommandType = CommandType.StoredProcedure; 
       adp.SelectCommand.Parameters.AddWithValue("s1",queryPart); 
       adp.SelectCommand.Parameters.AddWithValue("s2",DropDownList1.SelectedItem.ToString()); 
       adp.Fill(dt); 
       ListBox1.DataSource = dt ; 
       ListBox1.DataBind(); 
} 
0

データセットをコントロールにデータソースとして与えることができるかどうかはわかりません。コードをこのように変更して再試行できますか?

ListBox1.DataSource = ds.Tables[0]; 
ListBox1.DataBind(); 
関連する問題