读书人

ASP.NET如何样传参数给存储过程

发布时间: 2013-07-16 22:38:05 作者: rapoo

ASP.NET怎么样传参数给存储过程?

create PROCEDURE [dbo].[Proc_Qubernet]

@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

这样的存储过程,在.net后台怎么传入参数??
/// <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;
}

}
}
}

这是原本的,我现在想加入一个查询参数应该怎么写??
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

意思是把一个查询语句当作参数?

是的,就是new SqlParameter("@strWhere",strWhere), //-- 查询条件这个查询条件,应该怎么写?
传条件跟传查询语句貌似不可以吧
那一般用reapter控件显示,然后在前台有查询条件的时候应该怎么分页呢???
你可以在存储过程里面判断,之后把你在前台获取到的数据作为参数传入存储过程,在存储过程里面判断该参数是否符合你的要求,符合的话 就拼接条件就行了
[解决办法]
报什么错误?
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];

读书人网 >asp.net

热点推荐