-1

これが私のコードです

foreach (string word in words)
            {
                SqlCommand cmd= new SqlCommand("select * from skills  where (skills  like '%"+word+"%')",con);
                SqlDataAdapter da = new SqlDataAdapter(cmd); DataTable dt = new DataTable();
                da.Fill(dt);

            }

最後に、すべての結果をグリッドビューまたはどこかに表示したいと思います(各ループで異なる結果が得られます)。どうすればこれを達成できますか?

4

2 に答える 2

2

gridView C#winformで表示したいだけの場合は、次のようにします。

gridView1.DataSource = dt;

ただし、非常に大まかなアーキテクチャです。

編集1:

さて、私は要件を読み間違えました。スキャン読み取りは十分ではありません。Pranavの答えはすでに実用的な解決策です。それについて、いくつかメモを追加します。

SELECTまず、 forでステートメントを実行すると、パフォーマンスが非常に悪くなります。SELECTがヒットするたびに接続を開閉します。次に、mssqlの観点から、「%word%」のようにインデックスを作成できないため、問題が発生します。さらに、適切なデータを取得して構築できるwhere skill in('skill1', 'skill2', '..', '..')と、パフォーマンスが向上し、DataTableでの要件が軽減されます。

それでも%word%を使用する必要がある場合は、一時テーブルを使用し、代わりにsqlでクエリを実行することを検討してください。定期的には、for-SELECTを実行するよりも高速に実行する必要があります。

于 2013-03-19T09:51:37.643 に答える
1

あなたは次のようなことを試すことができます:-

 DataTable dt = new DataTable();
foreach (string word in words)
            {
                SqlCommand cmd= new SqlCommand("select * from skills  where (skills  like '%"+word+"%')",con);
                SqlDataAdapter da = new SqlDataAdapter(cmd); 
                DataTable dt1 = new DataTable();
                da.Fill(dt1);
                if (dt!= null)// to check if datatable is empty:-
                dt.Merge(dt1, false, MissingSchemaAction.Add);
                else
                dt=dt1.copy();// copy one datatable to another
                dt1.clear();
            }

//最後にデータテーブルをgridviewでバインドします:-

GridView1.DataSource = dt;

GridView1.DataBind();
于 2013-03-19T09:56:32.757 に答える