首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

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

2013-07-16 
ASP.NET怎么样传参数给存储过程?create PROCEDURE [dbo].[Proc_Qubernet]@tblNamevarchar(255),-- 表名@fl

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];

热点排行