我现在分页是在网上找的一个sql存储过程分页,他有个参数是接受查询条件
我程序里就这样写:
if(this.txtCompanyName.Text!="")
sbWhere.Append(" CompanyName like'%"+this.txtCompanyName.Text+"%'")
那我现在分页就要这样写了,那这不是就不是用的SqlParameter了吗?那这不会是就会sql注入了吗?我以前都是把查询条件@CompanyName这样写的,现在只能直接传查询条件了。因为我用的他的是一个在网上找的sql分页存储过程,你有什么好的方法么,或者我有什么误区吗?ALTER PROCEDURE [dbo].[PROCE_SQL2005PAGECHANGE]
(
 @TableName varchar(50),            --表名
 @ReFieldsStr varchar(200) = '*',   --字段名(全部字段为*)
 @OrderString varchar(200),         --排序字段(必须!支持多字段不用加order by)
 @WhereString varchar(500) =N'',  --条件语句(不用加where)
 @PageSize int,                     --每页多少条记录
 @PageIndex int = 1 ,               --指定当前为第几页
 @TotalRecord int output            --返回总记录数
)
AS
 
BEGIN        --处理开始点和结束点
    Declare @StartRecord int;
    Declare @EndRecord int; 
    Declare @TotalCountSql nvarchar(500); 
    Declare @SqlString nvarchar(2000);    
    set @StartRecord = (@PageIndex-1)*@PageSize + 1;
    set @EndRecord = @StartRecord + @PageSize - 1 ;
    SET @TotalCountSql= N'select @TotalRecord = count(*) from ' + @TableName;--总记录数语句
    SET @SqlString = N'(select row_number() over (order by '+ @OrderString +') as rowId,'+@ReFieldsStr+' from '+ @TableName;--查询语句
    --
    IF (@WhereString! = '' or @WhereString!=null)
        BEGIN
            SET @TotalCountSql=@TotalCountSql + ' with(nolock) where '+ @WhereString;
            SET @SqlString =@SqlString+ ' with(nolock) where '+ @WhereString;            
        END
    --第一次执行得到
    --IF(@TotalRecord is null)
    --   BEGIN
           EXEC sp_executesql @totalCountSql,N'@TotalRecord int out',@TotalRecord output;--返回总记录数
    --  END
    ----执行主语句
    set @SqlString ='select * from ' + @SqlString + ') as t where rowId between ' + ltrim(str(@StartRecord)) + ' and ' +  ltrim(str(@EndRecord));
    Exec(@SqlString)    
END
以上是存储过程分页的代码!希望有好心人士指教下,谢谢啦。

解决方案 »

  1.   

    exec可不是参数化,拼接字符串,然后exec是没有用的。记得'替换为''。。
      

  2.   

    using (SqlConnection sqlCon = new SqlConnection("")) 

    sqlCon.Open(); 
    sqlComm = new SqlCommand("", sqlCon); 
    sqlComm.CommandType = CommandType.StoredProcedure; sqlComm.Parameters.Add("@tblName ", SqlDbType.VarChar,200); 
    sqlComm.Parameters.Add("@fldName ", SqlDbType.VarChar, 200); 
    sqlComm.Parameters.Add("@pageCountint ", SqlDbType.int); 
    ... 
    sqlComm.Parameters["@pageCountint "].Direction = ParameterDirection.Output; 
    sqlComm.Parameters["@tblName "].Value = ""; 
    sqlComm.Parameters["@fldName "].Value = ""; 
    ... 
    sqlComm.ExecuteNonQuery(); 
    strng c= sqlComm.Parameters["@pageCountint "].Value.ToString(); 

    http://topic.csdn.net/u/20100206/10/c40bbcf1-5f82-4d85-85e8-207ee7f3d03e.html