0

入力に基づいてグリッドビューを検索するストアド プロシージャを作成しました。次のようになります。

Create procedure spSearch
( 
@Emp_id nvarchar(50) = null,
@Emp_name nvarchar(50) = null,
@Emp_exp nvarchar(50) = null,
@Emp_address nvarchar(50) = null
) 
AS 
BEGIN

If @Emp_id is not null and Len(@Emp_id )=0 Set @Emp_id = null
If @Emp_name is not null and Len(@Emp_name )=0 Set @Emp_name = null
If @Emp_exp is not null and Len(@Emp_exp )=0 Set @Emp_exp = null
If @Emp_address is not null and Len(@Emp_address )=0 Set @Emp_address = null

Select *
From tbl_employee
Where 
(@Emp_id is null or Emp_id Like @Emp_id )
and ( @Emp_name is null or Emp_name Like @Emp_name )
and ( @Emp_exp is null or Emp_exp Like @Emp_exp )
and ( @Emp_address is null or Emp_address Like @Emp_address )
END

ただし、この戻り値は、入力が既に保存されているデータと完全に一致する場合にのみ検索項目になります。

Eg : In tbl_employee I have 
Emp ID = 1
Emp_name = peter
Emp_exp = 2 years
Emp_address = xyz

Emp_name を「peter」と入力した場合にのみ、検索結果が gridview に取り込まれます。テキストボックスに「pe」と入力しても、「pe」を含むすべてのデータが入力されるように、ストアド プロシージャを変更する必要があります。

これはc#コードです:

private DataTable Search()
           {

               DataTable SearchResultsTable = new DataTable();

                SqlConnection conn = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString);


           try
              {

              SqlCommand cmd = new SqlCommand("spSearch", conn);
              cmd.CommandType = CommandType.StoredProcedure;
              cmd.Parameters.AddWithValue("@Emp_id", txtEmpID.Text);
              cmd.Parameters.AddWithValue("@Emp_name" , txtEmpName.Text);
              cmd.Parameters.AddWithValue("@Emp_exp " , txtEmpExp.Text);
              cmd.Parameters.AddWithValue("@Emp_address " , txtEmpAddress.Text);
              SqlDataAdapter adapter = new SqlDataAdapter(cmd);
              adapter.Fill(SearchResultsTable);

               }

            catch (Exception ex)
                {
                   Response.Write(ex.ToString());
                }

                finally
                {
                    if (conn != null)
                    {
                        conn.Close();
                    }
                }

                return SearchResultsTable ;
            }

        protected void  btnSearch_Click(object sender, EventArgs e)
            {

            EmployeeGridView.DataSource = Search();
            EmployeeGridView.DataBind();

            }
        }

検索がより柔軟になるようにこれを変更するにはどうすればよいですか。

4

2 に答える 2

0

手順でワイルドカードを使用して、要件を達成できます

これを見てください

ワイルドカード パラメータを使用したスト​​アド プロシージャ

于 2013-05-09T09:00:35.763 に答える
0

LIKE 演算子で SQL ワイルドカードを使用できます。

and ( @Emp_name is null or Emp_name Like @Emp_name )+ '%'

「P」で始まるすべての一致する結果が得られます。% は、データベース内の一致するすべての文字を置き換えます。

select * from yourTable where yourColumn= 'P%'

検索文字列の大文字/小文字をストアド プロシージャに送信することもお勧めします。次に、SQLクエリでもデータベース列を大文字/小文字にすることができます

select * from yourTable where UPPER(yourColumn)= 'P%'

したがって、「p%」または「P%」を検索しても同じ結果が得られます。

于 2013-05-09T09:02:24.223 に答える