1

ネストされたリピーターに取り組んでいます。私の問題は、現時点では、SQL コマンドを実行すると、データがデータ リーダーに返されないことです。まったく同じクエリ (コピーして貼り付け) を SQL Server に実行した場合でも。

私のnoteDrClientリーダーにはデータが含まれていませんが、テーブルに5つの列があることはわかっています。この時点で何をすべきか、またはデータ リーダーにデータが渡されない理由がわかりません。誰でも明らかな問題を見ることができますか?

  SqlConnection con = new SqlConnection("Data Source=***;Initial Catalog=*;User   ID=*;Password=*;Integrated Security=False;MultipleActiveResultSets=true;");

上記は私の接続文字列です。複数のアクティブな結果セットが true に設定されていることに注意してください。これを行ったのは、データ リーダーが閉じていても開いているというエラーが発生し続けたためです。

   protected void rptList_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        RepeaterItem item = e.Item;
        if ((item.ItemType == ListItemType.Item) ||
            (item.ItemType == ListItemType.AlternatingItem))
        {

            System.Data.Common.DbDataRecord rd = (System.Data.Common.DbDataRecord)e.Item.DataItem;

            Repeater nestedRepeater = e.Item.FindControl("NotesRepeater") as Repeater;
            string FID = rd[0].ToString();


            using (cmd2 = new SqlCommand("SELECT * FROM notes WHERE FID = 1356;", con)) ;

            SqlDataReader noteDrClient = cmd2.ExecuteReader();  //no data is being filled to the data reader... even though this command pulls data in SQL Server Management Studio.

            if (noteDrClient.Read()) {   //bind the repeater if there is data to bind
                    nestedRepeater.DataSource = noteDrClient;
                    nestedRepeater.DataBind();
            }

            noteDrClient.Close();                                   




        }
4

3 に答える 3

2

使用しているステートメントは、使用する前に SqlCommand を破棄しています。さらに、DataReader にバインドしようとしています。データ リーダーからの結果を "Note" エンティティのコレクションに取得し、代わりにコレクションにバインドします。

        using (SqlCommand cmd2 = new SqlCommand("SELECT * FROM notes WHERE FID = 1356;", con))
        {

            using(SqlDataReader noteDrClient = cmd2.ExecuteReader())
            {

                while (noteDrClient.Read()) 
                {   
                    Note n = new Note();
                    ... get note from data reader
                    notes.Add(n); // add note to collection
                }
            }
        } 

        // bind child
        nestedRepeater.DataSource = notes;       
        nestedRepeater.DataBind();       

編集:

DataAdapter を調べることをお勧めします - http://www.mikesdotnetting.com/Article/57/Displaying-One-To-Many-Relationships-with-Nested-Repeaters

于 2012-10-15T00:44:55.557 に答える
0

クエリのセミコロンが問題を引き起こす可能性があると思います。

次のように、値を引用符で囲んでみてください。

SELECT * FROM notes WHERE FID = '1356;'

セミコロンが値の一部でない場合:

SELECT * FROM notes WHERE FID = '1356'

于 2012-10-15T00:40:59.370 に答える
0

プライマリ リピーターに使用していた同じ接続文字列を再利用する代わりに、追加の接続文字列を作成することで問題を解決しました。データはまだバインドされていませんが、存在しています。

            using (cmd2 = new SqlCommand("SELECT * FROM notes WHERE FID = 1356;", con2)) ;
于 2012-10-15T00:27:38.690 に答える