0

私はSQL Server 2012とVisual Studio 2010を使用しています。これまでのところ、データベース内の単一のテーブルと、従業員をdatagridview

ただし、私がやりたいのは、役職が「ウェイター」の従業員のみを選択することです

これまでのところ、レコードの追加、データ全体の削除と表示に関するクエリを作成しました。

これまでのところ、指定された列を読み取ることによってのみ名前を表示することができました:

      private void LoadEmpName()
      {
            sc.Close();
            try
            {
                sc.Open();
                cmd.CommandText = "select * from myEmployees";
                dr = cmd.ExecuteReader();
                if (dr.HasRows)
                {
                    while (dr.Read())
                    {

                        lstNames.Items.Add(dr[1].ToString());
                    }
                }
                sc.Close();

            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }

「ウェイター」としてリストされている従業員のみが表示されるように既存のコードを変更することは可能ですか (名のみ)、またはまったく別のクエリを作成する必要がありますか?

4

5 に答える 5

2

「JobTitle」という列がある場合、クエリは次のようになります。

"select * from myEmployees where JobTitle like '%waiter%'";

「like」は比較演算子で、「%」は任意の数の文字のワイルドカードです。

さまざまなクエリが必要な場合は、いくつかの方法があります。最も簡単な方法は、クエリ文字列にパートタイム テストを含む新しいメソッドを単純に作成することです。

"select * from myEmployees where PartTime = 1";

ただし、ユーザーが実行できる可能性のある検索ごとに新しいクエリが必要になり、これを維持するのは非効率的になります。

データ グリッドにデータを入力しているときは、クライアントでフィルタリングを行うことを確認する必要があります。すべてのデータを (大量の場合はページングを使用して) 取得し、ユーザーが独自のフィルターを指定して、表示したい情報を決定できるようにします。

于 2013-03-07T21:34:21.933 に答える
2

whereSQL クエリに句を追加する必要があります。あなたのデータベース構造はわかりませんが、次のようなものです。

cmd.CommandText = "select * from myEmployees where title='waiter'";

C# ではなく SQL でフィルター処理を行う方がはるかに効率的です。

于 2013-03-07T21:34:31.053 に答える
1

クエリを変更する必要があります。それはより良いアプローチです。 @CrisF ソリューションが気に入りました。それに追加するだけです。

    private void LoadEmpName()
    {

        try
        {
            sc.Open();
            //it will return all employees containing word waiter in Column JobTitle.
            cmd.CommandText = "select * from myEmployees where JobTitle like '%waiter%' ";

            dr = cmd.ExecuteReader();
            while (dr.Read())
            {
               lstNames.Items.Add(dr[1].ToString());
            }

        }
        catch (Exception e)
        {
            MessageBox.Show(e.ToString());
        }
        finally
        {
           sc.Close();
        }
    }
于 2013-03-07T21:57:00.723 に答える
1
select * from myEmployees where jobtitle='Waiter'
于 2013-03-07T21:34:33.197 に答える
1

免責事項: OP は、「「ウェイター」としてリストされている従業員のみが表示されるように既存のコードを変更することは可能ですか (名のみ)、またはまったく別のクエリを作成する必要がありますか?」と尋ねました。

したがって、新しいクエリを使用する必要はないと純粋に答えるために。次のように追加する前にifを配置できます(2番目の列が「役職」であると仮定):

                while (dr.Read())
                {
                    if(dr[2].ToString().EqualsIgnoreCase("Waiter")){
                        lstNames.Items.Add(dr[1].ToString());
                    }
                }

私はそれをお勧めしませんが。

于 2013-03-07T21:36:51.150 に答える