0

テキストボックスに基づいてデータグリッドの行をフィルタリングしたいのですが、ストアドプロシージャを使用しているので、コードは次のようになります。

選択のためにストアドプロシージャでクエリを記述しました:

if @operation =1
select * from Item_Configuration where itemId like '%' + itemId + '%'

C#コードは

private void btnSrch_Click(object sender, EventArgs e)
{
    SqlConnection conn1 = new SqlConnection();

    try
    {
        SqlCommand selectItem = new SqlCommand("Item_Configuration_SP", conn1);
        selectItem.CommandType = CommandType.StoredProcedure;


      if (itemId.Text=="")
            {
                selectItem.Parameters.Add("@operation", SqlDbType.VarChar);
                selectItem.Parameters["@operation"].Value = 1;

                selectItem.Parameters.Add("@itemId", SqlDbType.VarChar);
                selectItem.Parameters["@itemId"].Value = itmId.Text;

            SqlDataReader myReader = selectItem.ExecuteReader();
            List<Item> list = new List<Item>();
            while (myReader.Read())
            {
                if (myReader.HasRows)
                {
                    Item item = new Item();
                    item = MapItem(myReader, item);
                    list.Add(item);
                }
            }

            dataGridView1.DataSource = list;
        }
    }
}

今、私はグリッド上のすべてのレコードを取得します。レコードはテキストボックスに基づいてフィルタリングされていません。間違っている場所を見つけることができません。助けてください

4

2 に答える 2

1

あなたがSql Serverを使用していることを考えると、あなたのクエリは磨耗しています

これの代わりに

select * from Item_Configuration where itemId = '%' + itemId + '%'

それは違いない

select * from Item_Configuration where itemId LIKE '%' + itemId + '%'
于 2012-07-23T11:22:55.867 に答える
0

また、テキストボックスの入力から操作IDを取得する場合は、これを追加する必要があります

selectItem.Parameters["@operation"].Value = txtbox.Text.Trim();
于 2012-07-23T11:24:58.627 に答える