asp.Netファジイクエリーストレージプロシージャ


このネットについてはたくさんありますが、非常に完全ではありません.多くの霧を見ています.私も先輩のたくさんの資料に基づいてまとめて、完璧な紹介をして、みんなが一緒に勉強することを望んでいます.
まず、ストレージ・プロシージャです.
 
   
   
   
   
  1. ALTER PROCEDURE [dbo].[GetRecordFromPage] 
  2.     @tblName      varchar(255),       --   
  3.     @fldName      varchar(255),       --   
  4.     @PageSize     int = 10,           --   
  5.     @PageIndex    int = 1,            --   
  6.     @IsReCount    bit = 0,            --  ,   0   
  7.     @OrderType    bit = 0,            --  ,   0   
  8.     @strWhere     varchar(2000) = ''  --   ( :   where) 
  9. AS 
  10.  
  11. declare @strSQL   varchar(6000)       --   
  12. declare @strTmp   varchar(1000)       --   
  13. declare @strOrder varchar(500)        --   
  14. declare @str varchar(500) --  
  15.  
  16. if @OrderType != 0 
  17. begin 
  18.     set @strTmp = ' 
  19.     set @strOrder = ' order by [' + @fldName + '] desc' 
  20. end 
  21. else 
  22. begin 
  23.     set @strTmp = '>(select max' 
  24.     set @strOrder = ' order by [' + @fldName +'] asc' 
  25. end 
  26.  
  27. set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
  28.     + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' 
  29.     + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
  30.     + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)' 
  31.     + @strOrder 
  32.  
  33. if @strWhere != '' 
  34.     set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
  35.         + @tblName + '] where [' + @fldName + ']' + @strTmp + '([' 
  36.         + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' [' 
  37.         + @fldName + '] from [' + @tblName + '] where (' + @strWhere + ') ' 
  38.         + @strOrder + ') as tblTmp) and (' + @strWhere + ') ' + @strOrder 
  39.  
  40.  
  41. if @PageIndex = 1 
  42. begin 
  43.     set @strTmp = '' 
  44.     if @strWhere != '' 
  45.         set @strTmp = ' where (' + @strWhere + ') ' 
  46.  
  47.     set @strSQL = 'select top ' + str(@PageSize) + ' * from [' 
  48.         + @tblName + ']' + @strTmp + ' ' + @strOrder 
  49. end 
  50.  
  51. if @IsReCount != 0 
  52.     set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where (' + @strWhere + ') ' 
  53.  
  54. exec (@strSQL) 

確立が必要な場合はALTERをCREATEに変更すればよい.
次に、使用方法について説明します.私は3階層アーキテクチャを採用しています.
まずはWEB:
 
   
   
   
   
  1. ///  
  2.        ///   
  3.        ///  
  4.        ///  
  5.        ///  
  6.        protected void btnSearch_Click(object sender, EventArgs e) 
  7.        { 
  8.            SZBG.BLL.HS.OrdinaryHSInquires_BL bll = new SZBG.BLL.HS.OrdinaryHSInquires_BL(); 
  9.            this.AspNetPager.RecordCount = bll.GetCount(this.txtStr.Text); 
  10.            this.BindData(); 
  11.        } 
  12.  

これはボタンのイベントです
 
   
   
   
   
  1. ///  
  2. ///   
  3. ///  
  4. private void BindData() 
  5.     SZBG.BLL.HS.OrdinaryHSInquires_BL bll = new SZBG.BLL.HS.OrdinaryHSInquires_BL(); 
  6.     DataSet ds = bll.GetList(this.AspNetPager.PageSize, this.AspNetPager.CurrentPageIndex, this.txtStr.Text, "1"); 
  7.     this.HSGridView.DataSource = ds; 
  8.     this.HSGridView.DataBind(); 

これはGridViewにバインドされた関数です.
 
BLL層:
 
   
   
   
   
  1. ///  
  2.        ///   
  3.        ///  
  4.        ///   
  5.        ///   
  6.        ///   
  7.        ///  ,   0   
  8.        ///  
  9.        public DataSet GetList(int PageSize, int PageIndex, string strWhere, string OrderType) 
  10.        { 
  11.            return dal.GetList(PageSize, PageIndex, strWhere, OrderType); 
  12.        } 

 
DALレイヤー:
 
   
   
   
   
  1. ///  
  2. ///   
  3. ///  
  4. ///   
  5. ///   
  6. ///   
  7. ///  ,   0   
  8. ///  
  9. public DataSet GetList(int PageSize, int PageIndex, string str, string OrderType) 
  10.     string keyStr = ""
  11.     if (str != ""
  12.     { 
  13.        keyStr = "Name like '%" + str + "%'"
  14.     } 
  15.     SqlParameter[] parameters = { 
  16.             new SqlParameter("@tblName", SqlDbType.VarChar, 255), 
  17.             new SqlParameter("@fldName", SqlDbType.VarChar, 255), 
  18.             new SqlParameter("@PageSize", SqlDbType.Int), 
  19.             new SqlParameter("@PageIndex", SqlDbType.Int), 
  20.             new SqlParameter("@IsReCount", SqlDbType.Bit), 
  21.             new SqlParameter("@OrderType", SqlDbType.Bit), 
  22.             new SqlParameter("@strWhere", SqlDbType.VarChar,1000), 
  23.             }; 
  24.     parameters[0].Value = "HS_Code"
  25.     parameters[1].Value = "Name"
  26.     parameters[2].Value = PageSize; 
  27.     parameters[3].Value = PageIndex; 
  28.     parameters[4].Value = 0; 
  29.     parameters[5].Value = int.Parse(OrderType); 
  30.     parameters[6].Value = keyStr; 
  31.     return DBHelper.RunProcedure("GetRecordFromPage", parameters, "ds"); 


ここでkeyStr="Name like'%"+str+"%';ファジイクエリに入力されるパラメータです
 
最後はDBHelperです.
 
   
   
   
   
  1. ///  
  2. ///   
  3. ///  
  4. ///   
  5. ///   
  6. /// DataSet  
  7. /// DataSet 
  8. public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName) 
  9.     using (SqlConnection connection = new SqlConnection(connectionString)) 
  10.     { 
  11.         DataSet dataSet = new DataSet(); 
  12.         connection.Open(); 
  13.         SqlDataAdapter sqlDA = new SqlDataAdapter(); 
  14.         sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); 
  15.         sqlDA.Fill(dataSet, tableName); 
  16.         connection.Close(); 
  17.         return dataSet; 
  18.     } 
  19.  
  20. ///  
  21. ///   SqlCommand  ( , ) 
  22. ///  
  23. ///   
  24. ///   
  25. ///   
  26. /// SqlCommand 
  27. private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters) 
  28.     SqlCommand command = new SqlCommand(storedProcName, connection); 
  29.     command.CommandType = CommandType.StoredProcedure; 
  30.     foreach (SqlParameter parameter in parameters) 
  31.     { 
  32.         if (parameter != null
  33.         { 
  34.             if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) && 
  35.                 (parameter.Value == null)) 
  36.             { 
  37.                 parameter.Value = DBNull.Value; 
  38.             } 
  39.             command.Parameters.Add(parameter); 
  40.         } 
  41.     } 
  42.  
  43.     return command; 

これでほぼ機能が実現します.
皆さんに役に立つことを願っています.