public virtual DataSet FuzzyQueries(string StoredProcedureName, string KeyWord, SqlParameter[] sqlParameters, string Sort, int PageIndex, int PageSize)
{
DataSet ds = new DataSet();
using (SqlCommand comm = Connection.CreateCommand())
{
comm.Transaction = Transaction;
comm.CommandType = CommandType.StoredProcedure;
comm.CommandText = "usp_Common_Search";
StringBuilder sb = new StringBuilder();
if (sqlParameters != null)
{
foreach (SqlParameter item in sqlParameters)
{
if (sb.Length != 0)
{
sb.Append(",");
}
if (item.Value == DBNull.Value)
{
sb.AppendFormat("{0}={1}", item.ParameterName, "null");
}
else
{
sb.AppendFormat("{0}='{1}'", item.ParameterName, item.Value);
}
}
}
comm.Parameters.AddWithValue("@AllKeyWords", KeyWord);
comm.Parameters.AddWithValue("@uspName", StoredProcedureName);
comm.Parameters.AddWithValue("@uspParas", sb.ToString());
comm.Parameters.AddWithValue("@DBConnStr", AppConfig.ConnectionString);
comm.Parameters.AddWithValue("@PageIndex", PageIndex);
comm.Parameters.AddWithValue("@PageSize", PageSize);
if (!string.IsNullOrEmpty(Sort))
{
comm.Parameters.AddWithValue("@OrderKey", Sort);
}
using (SqlDataAdapter adapter = new SqlDataAdapter(comm))
{
adapter.Fill(ds);
}
}
return ds;
}
/******************************************************************************
** Name: usp_Common_Search
** Desc: 搜索
**
**
** Return Values:
**
** Parameters:
** Auth:
** Date:2008-10-21
*******************************************************************************/
ALTER proc usp_Common_Search
@AllKeyWords varchar(max),
@uspName varchar(500),
@uspParas varchar(max)=null,
@DBConnStr varchar(max),
@PageIndex int = 0, --当前页索引(索引从0开始)
@PageSize int = 200, --每页显示的记录数
@OrderKey varchar(300) = '__Keyword'
as
begin
declare @sql nvarchar(max),@where nvarchar(max)
declare @csr CURSOR,@word varchar(500),@temp varchar(1000);
--replace chinses space
set @AllKeyWords = Replace(@AllKeyWords,' ',' ')
set @csr=cursor for
select sValue
from dbo.ufn_Split(@AllKeyWords,' ')
where sValue <> ' '
open @csr
fetch next from @csr into @word
while(@@FETCH_STATUS <> -1)
begin
if @where is null or @where = ''
begin
set @where = '__KeyWord like ''%' + @word + '%''';
end
else
begin
set @where = @where + ' or __KeyWord like ''%' + @word + '%''';
end
fetch next from @csr into @word
end
--keyword is empty
if len(@AllKeyWords)=0 set @where = '__Keyword like ''%%'''
CLOSE @csr
DEALLOCATE @csr
set @uspParas = replace(@uspParas,'''','''''');
--set @DBConnStr = replace(@DBConnStr,'''','''''');
set @temp = '''SET FMTONLY OFF;set nocount on;exec ' + @uspName + ' ' + IsNull(@uspParas,'') + ' '''
set @sql = 'select * into #xxxxxx from openrowset(''SQLOLEDB'',
''' + @DBConnStr + ''',' +
+ @temp + ') a ;'
set @sql = @sql + '; '
--以下是查询
--set @sql = @sql + 'select * from #xxxxxx where ' + @where + ' '
--print @sql
--set @conn = 'SERVER=(local);uid=sa;pwd=Pass@word;Database=' + db_name()
--exec sp_executesql @sql
--执行第一遍取总页数;执行第二遍传入总页数,分页
declare @rtn int,@TotalNum int,@strSQLAll nvarchar(max),@strSel varchar(max),@TotalRecord int
,@ParmDefinition nvarchar(50)
-- set @strSQLAll = @sql + 'select @TotalNumoutput = count(*) from #xxxxxx where ' + @where + '
-- drop table #xxxxxx'
--
-- print @strSqlAll
-- SET @ParmDefinition = N'@TotalNumoutput int OUTPUT';
-- EXEC dbo.sp_executesql @strSQLAll,@ParmDefinition,@TotalNumoutput=@TotalNum OUTPUT;
--
-- set @TotalRecord = @TotalNum
--
-- set @TotalNum = ceiling(cast(@TotalNum as float)/@PageSize)
--返回记录
set @strSel = @sql + ' ;
with Employee as
(
SELECT a.*,ROW_NUMBER() OVER (ORDER BY ' + @OrderKey + ') AS ROW_NUMBER
FROM #xxxxxx a
'
declare @strSelLater varchar(300)
set @strSelLater = '
)
select *,@TotalNum1 as PageCount FROM Employee WHERE ROW_NUMBER >
@PageSize1/1*@PageIndex1 AND ROW_NUMBER <=
@PageSize1/1*(@PageIndex1+1) ORDER BY ' + @OrderKey
set @strSQLAll = @strSel + ' where ' + @where + @strSelLater + '
select count(*) TotalRecord from #xxxxxx where ' + @where + ';
drop table #xxxxxx';
PRINT @strSQLAll
SET @ParmDefinition = N'@PageSize1 int,@PageIndex1 int,@TotalNum1 int'
EXEC dbo.sp_executesql @strSQLAll,@ParmDefinition,@PageSize1 = @PageSize,@PageIndex1 = @PageIndex,@TotalNum1= @TotalNum
--select @TotalRecord TotalRecord
end
/******************************************************************************
** Name: ufn_Split
** Desc: 拆分字符串
**
**
** Return Values:
**
** Parameters:
** Auth:
** Date:2008-10-24
*******************************************************************************/
ALTER function [dbo].[ufn_Split]
(
@String varchar(max), -- 要拆分的字符串
@Key varchar(50) -- 关键字
)
returns @sValues table(sIndex int identity(1,1), sValue varchar(max) )
as
begin
-- 索引及当前值
declare @KeyIndex int
declare @CurrentValue varchar(500)
set @string = RTrim(LTrim(@String))
-- 拆分
set @KeyIndex = charindex(@Key,@string)
while @KeyIndex <> 0
begin
set @CurrentValue = substring(@String,1,@KeyIndex-1)
insert into @sValues(sValue) values (@CurrentValue)
set @String = substring(@String, @KeyIndex+1, len(@String)- @KeyIndex)
set @KeyIndex = charindex(@Key, @String)
end
insert into @sValues(sValue) values (@String)
-- 返回拆份结果
return
end
/******************************************************************************
** Name: usp_base_PersonSearch
** Desc: 搜索人员
**
**
** Return Values:
**
** Parameters:
** Auth:
** Date:2008-10-21
usp_cfg_GetProjectFileByCode @status = 0
*******************************************************************************/
ALTER proc usp_base_PersonSearch
as
begin
select PersonName __KeyWord,C.UserName,dbo.uf_GetOUName(a.OUID) OUName,A.*
from tbl_base_PersonInfo a left join tbl_base_userMapping b
on a.PersonID = b.PersonID left join tbl_base_user c
on b.UserID = c.UserID
end