ASP.NET怎么样传参数给存储过程?
create PROCEDURE [dbo].[Proc_Qubernet]这样的存储过程,在.net后台怎么传入参数??
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType bit = 0, -- 设置排序类型, 非0 值则降序
@IsCount bit = 0, -- 返回记录总数, 非0 值则返回
@strWhere varchar(2000) = '' -- 查询条件(注意: 不要加where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(1000) -- 临时变量
declare @strOrder varchar(500) -- 排序类型
if @OrderType != 0
begin
set @strTmp = '<(select min'
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 @IsCount != 0
set @strSQL = 'select count(' + @fldName + ') as Total from [' + @tblName + ']'
exec (@strSQL)
GO
/// <summary>这是原本的,我现在想加入一个查询参数应该怎么写??
/// 分页存储过程
/// </summary>
/// <param name="tbName">查询表名</param>
/// <param name="keyorder">查询排序</param>
/// <param name="keymain">查询主键</param>
/// <param name="columns">查询字段</param>
/// <param name="strWhere">查询条件</param>
/// <param name="PageSize">每页数量</param>
/// <param name="PageIndex">当前页数</param>
/// <param name="RowsCount">记录总数</param>
/// <param name="PageCount">分页总数</param>
/// <returns></returns>
public static DataSet Proc_DataSet(string tbName, string keyorder, string keymain, string columns, string strWhere, int PageSize, int PageIndex, int RowsCount, int PageCount)
{
SqlParameter[] sp ={
new SqlParameter("@tbName",tbName), // -- 查询表名
new SqlParameter("@keyorder",keyorder), //-- 查询排序
new SqlParameter("@keymain",keymain), // -- 查询主键
new SqlParameter("@columns",columns), // -- 查询字段
new SqlParameter("@strWhere",strWhere), //-- 查询条件
new SqlParameter("@PageSize",PageSize), //-- 页大小
new SqlParameter("@PageIndex",PageIndex), //--当前页
new SqlParameter("@RowsCount",RowsCount), //--记录总数
new SqlParameter("@PageCount",PageCount) // ----页面总数
};
return Proc_GetDataSet("Proc_Qubernet", true, sp);
}
public static DataTable GetTestData(string tabname, int pagesize, int pageindex, string fieldname, bool IsCount)
{
int a = 0;
if (IsCount)
{
a = 1;
}
using (SqlConnection conn = new SqlConnection("server=.;Database=JFData;uid=sa;pwd=1"))
{
using (SqlDataAdapter sda = new SqlDataAdapter("exec Proc_Qubernet '" + tabname + "','" + fieldname + "'," + pagesize + "," + pageindex + ",0," + a + "", conn))
{
conn.Open();
using (DataTable dt = new DataTable())
{
sda.Fill(dt);
return dt;
}
}
}
}
[解决办法]
你可以在存储过程里面判断,之后把你在前台获取到的数据作为参数传入存储过程,在存储过程里面判断该参数是否符合你的要求,符合的话 就拼接条件就行了
[解决办法]
报什么错误?
exec Proc_Qubernet '" + tabname + "','" + fieldname + "','" + Filter +"',"+ pagesize + "," + pageindex + ",0," + a + "
你这样执行 存储过程 Proc_Qubernet 后边跟的参数要和 存储过程中定义的对应(而不是和Proc_DataSet方法中的参数对应),如存储过程中定义 的@strWhere 在最后一个,而你传入的参数a 表示是否返回总数
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@OrderType bit = 0, -- 设置排序类型, 非0 值则降序
@IsCount bit = 0, -- 返回记录总数, 非0 值则返回
@strWhere varchar(2000) = '' -- 查询条件(注意: 不要加where)
这里你为什么不调用Proc_DataSet方法进行分页查询
而要再写一个?
[解决办法]
你先在 的Filter 应该是 查询参数吧 。而他对应的 存储过程中@PageSize int,
直接调用Proc_DataSet就可以了。。因为你和Proc_DataSet调用的 是一个存储过程啊
你的 Filter 对应传递给Proc_DataSet中 strWhere参数就好了啊
[解决办法]
第二个参数 是 keyorder,应该是排序列名,为何你是0
存储过程中只有7个参数 ,为何你 Proc_DataSet中给存储过程加了 9个参数
new SqlParameter("@RowsCount",RowsCount), //--记录总数
new SqlParameter("@PageCount",PageCount) // ----页面总数
Proc_Qubernet存储过程中没有上边的两个输入参数啊
[解决办法]
Proc_DataSet 返回值是 DataSet?
可以用
DataSet? ds=Proc_DataSet();
DataTable dt1=ds.Tables[0];
DataTable dt2=ds.Tables[1];