asp.Netファジイクエリーストレージプロシージャ
23383 ワード
このネットについてはたくさんありますが、非常に完全ではありません.多くの霧を見ています.私も先輩のたくさんの資料に基づいてまとめて、完璧な紹介をして、みんなが一緒に勉強することを望んでいます.
まず、ストレージ・プロシージャです.
確立が必要な場合はALTERをCREATEに変更すればよい.
次に、使用方法について説明します.私は3階層アーキテクチャを採用しています.
まずはWEB:
これはボタンのイベントです
これはGridViewにバインドされた関数です.
BLL層:
DALレイヤー:
ここでkeyStr="Name like'%"+str+"%';ファジイクエリに入力されるパラメータです
最後はDBHelperです.
これでほぼ機能が実現します.
皆さんに役に立つことを願っています.
まず、ストレージ・プロシージャです.
- ALTER PROCEDURE [dbo].[GetRecordFromPage]
- @tblName varchar(255), --
- @fldName varchar(255), --
- @PageSize int = 10, --
- @PageIndex int = 1, --
- @IsReCount bit = 0, -- , 0
- @OrderType bit = 0, -- , 0
- @strWhere varchar(2000) = '' -- ( : where)
- AS
-
- declare @strSQL varchar(6000) --
- declare @strTmp varchar(1000) --
- declare @strOrder varchar(500) --
- declare @str varchar(500) --
-
- if @OrderType != 0
- begin
- set @strTmp = '
- set @strOrder = ' order by [' + @fldName + '] desc'
- end
- else
- begin
- set @strTmp = '>(select max'
- set @strOrder = ' order by [' + @fldName +'] asc'
- end
-
- set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
- + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
- + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
- + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
- + @strOrder
-
- if @strWhere != ''
- set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
- + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
- + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
- + @fldName + '] from [' + @tblName + '] where (' + @strWhere + ') '
- + @strOrder + ') as tblTmp) and (' + @strWhere + ') ' + @strOrder
-
-
- if @PageIndex = 1
- begin
- set @strTmp = ''
- if @strWhere != ''
- set @strTmp = ' where (' + @strWhere + ') '
-
- set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
- + @tblName + ']' + @strTmp + ' ' + @strOrder
- end
-
- if @IsReCount != 0
- set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where (' + @strWhere + ') '
-
- exec (@strSQL)
確立が必要な場合はALTERをCREATEに変更すればよい.
次に、使用方法について説明します.私は3階層アーキテクチャを採用しています.
まずはWEB:
- ///
- ///
- ///
- ///
- ///
- protected void btnSearch_Click(object sender, EventArgs e)
- {
- SZBG.BLL.HS.OrdinaryHSInquires_BL bll = new SZBG.BLL.HS.OrdinaryHSInquires_BL();
- this.AspNetPager.RecordCount = bll.GetCount(this.txtStr.Text);
- this.BindData();
- }
-
これはボタンのイベントです
- ///
- ///
- ///
- private void BindData()
- {
- SZBG.BLL.HS.OrdinaryHSInquires_BL bll = new SZBG.BLL.HS.OrdinaryHSInquires_BL();
- DataSet ds = bll.GetList(this.AspNetPager.PageSize, this.AspNetPager.CurrentPageIndex, this.txtStr.Text, "1");
- this.HSGridView.DataSource = ds;
- this.HSGridView.DataBind();
- }
これはGridViewにバインドされた関数です.
BLL層:
- ///
- ///
- ///
- ///
- ///
- ///
- /// , 0
- ///
- public DataSet GetList(int PageSize, int PageIndex, string strWhere, string OrderType)
- {
- return dal.GetList(PageSize, PageIndex, strWhere, OrderType);
- }
DALレイヤー:
- ///
- ///
- ///
- ///
- ///
- ///
- /// , 0
- ///
- public DataSet GetList(int PageSize, int PageIndex, string str, string OrderType)
- {
- string keyStr = "";
- if (str != "")
- {
- keyStr = "Name like '%" + str + "%'";
- }
- SqlParameter[] parameters = {
- new SqlParameter("@tblName", SqlDbType.VarChar, 255),
- new SqlParameter("@fldName", SqlDbType.VarChar, 255),
- new SqlParameter("@PageSize", SqlDbType.Int),
- new SqlParameter("@PageIndex", SqlDbType.Int),
- new SqlParameter("@IsReCount", SqlDbType.Bit),
- new SqlParameter("@OrderType", SqlDbType.Bit),
- new SqlParameter("@strWhere", SqlDbType.VarChar,1000),
- };
- parameters[0].Value = "HS_Code";
- parameters[1].Value = "Name";
- parameters[2].Value = PageSize;
- parameters[3].Value = PageIndex;
- parameters[4].Value = 0;
- parameters[5].Value = int.Parse(OrderType);
- parameters[6].Value = keyStr;
- return DBHelper.RunProcedure("GetRecordFromPage", parameters, "ds");
- }
ここでkeyStr="Name like'%"+str+"%';ファジイクエリに入力されるパラメータです
最後はDBHelperです.
- ///
- ///
- ///
- ///
- ///
- /// DataSet
- ///
DataSet
- public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
- {
- using (SqlConnection connection = new SqlConnection(connectionString))
- {
- DataSet dataSet = new DataSet();
- connection.Open();
- SqlDataAdapter sqlDA = new SqlDataAdapter();
- sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
- sqlDA.Fill(dataSet, tableName);
- connection.Close();
- return dataSet;
- }
- }
-
- ///
- /// SqlCommand ( , )
- ///
- ///
- ///
- ///
- ///
SqlCommand
- private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
- {
- SqlCommand command = new SqlCommand(storedProcName, connection);
- command.CommandType = CommandType.StoredProcedure;
- foreach (SqlParameter parameter in parameters)
- {
- if (parameter != null)
- {
- if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
- (parameter.Value == null))
- {
- parameter.Value = DBNull.Value;
- }
- command.Parameters.Add(parameter);
- }
- }
-
- return command;
- }
これでほぼ機能が実現します.
皆さんに役に立つことを願っています.