千家信息网

asp.net中怎么调用sql存储过程

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,asp.net中怎么调用sql存储过程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、创建存储过程,语句如下: CREATE PR
千家信息网最后更新 2026年11月02日asp.net中怎么调用sql存储过程

asp.net中怎么调用sql存储过程,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1、创建存储过程,语句如下:

 CREATE PROC P_viewPage @TableName VARCHAR(200), --表名 @FieldList VARCHAR(2000), --显示列名,如果是全部字段则为* @PrimaryKey VARCHAR(100), --单一主键或唯一值键 @Where VARCHAR(2000), --查询条件 不含'where'字符,如id>10 and len(userid)>9 @Order VARCHAR(1000), --排序 不含'order by'字符,如id asc,userid desc,必须指定asc或desc                    --注意当@SortType=3时生效,记住一定要在最后加上主键,否则会让你比较郁闷 @SortType INT,   --排序规则 1:正序asc 2:倒序desc 3:多列排序方法 @RecorderCount INT,  --记录总数 0:会返回总记录 @PageSize INT,   --每页输出的记录数 @PageIndex INT,   --当前页数 @TotalCount INT OUTPUT,  --记返回总记录 @TotalPageCount INT OUTPUT  --返回总页数AS SET NOCOUNT ON IF ISNULL(@TotalCount,'') = '' SET @TotalCount = 0 SET @Order = RTRIM(LTRIM(@Order)) SET @PrimaryKey = RTRIM(LTRIM(@PrimaryKey)) SET @FieldList = REPLACE(RTRIM(LTRIM(@FieldList)),' ','') WHILE CHARINDEX(', ',@Order) > 0 OR CHARINDEX(' ,',@Order) > 0 BEGIN  SET @Order = REPLACE(@Order,', ',',')  SET @Order = REPLACE(@Order,' ,',',')  END IF ISNULL(@TableName,'') = '' OR ISNULL(@FieldList,'') = ''   OR ISNULL(@PrimaryKey,'') = ''  OR @SortType < 1 OR @SortType >3  OR @RecorderCount < 0 OR @PageSize < 0 OR @PageIndex < 0  BEGIN   PRINT('ERR_00')    RETURN END  IF @SortType = 3 BEGIN  IF (UPPER(RIGHT(@Order,4))!=' ASC' AND UPPER(RIGHT(@Order,5))!=' DESC')  BEGIN PRINT('ERR_02') RETURN END END DECLARE @new_where1 VARCHAR(1000) DECLARE @new_where2 VARCHAR(1000) DECLARE @new_order1 VARCHAR(1000)   DECLARE @new_order2 VARCHAR(1000) DECLARE @new_order3 VARCHAR(1000) DECLARE @Sql VARCHAR(8000) DECLARE @SqlCount NVARCHAR(4000) IF ISNULL(@where,'') = ''  BEGIN   SET @new_where1 = ' '   SET @new_where2 = ' WHERE '  END ELSE  BEGIN   SET @new_where1 = ' WHERE ' + @where    SET @new_where2 = ' WHERE ' + @where + ' AND '  END IF ISNULL(@order,'') = '' OR @SortType = 1 OR @SortType = 2   BEGIN   IF @SortType = 1    BEGIN     SET @new_order1 = ' ORDER BY ' + @PrimaryKey + ' ASC'    SET @new_order2 = ' ORDER BY ' + @PrimaryKey + ' DESC'   END   IF @SortType = 2    BEGIN     SET @new_order1 = ' ORDER BY ' + @PrimaryKey + ' DESC'    SET @new_order2 = ' ORDER BY ' + @PrimaryKey + ' ASC'   END  END ELSE  BEGIN   SET @new_order1 = ' ORDER BY ' + @Order  END IF @SortType = 3 AND CHARINDEX(','+@PrimaryKey+' ',','+@Order)>0  BEGIN   SET @new_order1 = ' ORDER BY ' + @Order   SET @new_order2 = @Order + ','     SET @new_order2 = REPLACE(REPLACE(@new_order2,'ASC,','{ASC},'),'DESC,','{DESC},')     SET @new_order2 = REPLACE(REPLACE(@new_order2,'{ASC},','DESC,'),'{DESC},','ASC,')   SET @new_order2 = ' ORDER BY ' + SUBSTRING(@new_order2,1,LEN(@new_order2)-1)     IF @FieldList <> '*'    BEGIN       SET @new_order3 = REPLACE(REPLACE(@Order + ',','ASC,',','),'DESC,',',')          SET @FieldList = ',' + @FieldList        WHILE CHARINDEX(',',@new_order3)>0     BEGIN      IF CHARINDEX(SUBSTRING(','+@new_order3,1,CHARINDEX(',',@new_order3)),','+@FieldList+',')>0      BEGIN       SET @FieldList =        @FieldList + ',' + SUBSTRING(@new_order3,1,CHARINDEX(',',@new_order3))         END      SET @new_order3 =       SUBSTRING(@new_order3,CHARINDEX(',',@new_order3)+1,LEN(@new_order3))     END     SET @FieldList = SUBSTRING(@FieldList,2,LEN(@FieldList))       END    END SET @SqlCount = 'SELECT @TotalCount=COUNT(*),@TotalPageCount=CEILING((COUNT(*)+0.0)/'     + CAST(@PageSize AS VARCHAR)+') FROM ' + @TableName + @new_where1 IF @RecorderCount = 0  BEGIN    EXEC SP_EXECUTESQL @SqlCount,N'@TotalCount INT OUTPUT,@TotalPageCount INT OUTPUT',         @TotalCount OUTPUT,@TotalPageCount OUTPUT  END ELSE  BEGIN    SELECT @TotalCount = @RecorderCount    END IF @PageIndex > CEILING((@TotalCount+0.0)/@PageSize)  BEGIN   SET @PageIndex = CEILING((@TotalCount+0.0)/@PageSize)  END IF @PageIndex = 1 OR @PageIndex >= CEILING((@TotalCount+0.0)/@PageSize)  BEGIN   IF @PageIndex = 1 --返回第一页数据    BEGIN     SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '          + @TableName + @new_where1 + @new_order1    END   IF @PageIndex >= CEILING((@TotalCount+0.0)/@PageSize) --返回最后一页数据    BEGIN     SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('          + 'SELECT TOP ' + STR(ABS(@PageSize*@PageIndex-@TotalCount-@PageSize))          + ' ' + @FieldList + ' FROM '         + @TableName + @new_where1 + @new_order2 + ' ) AS TMP '         + @new_order1       END   END  ELSE  BEGIN   IF @SortType = 1 --仅主键正序排序    BEGIN     IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2 --正向检索      BEGIN       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '            + @TableName + @new_where2 + @PrimaryKey + ' > '           + '(SELECT MAX(' + @PrimaryKey + ') FROM (SELECT TOP '           + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey            + ' FROM ' + @TableName           + @new_where1 + @new_order1 +' ) AS TMP) '+ @new_order1      END     ELSE --反向检索      BEGIN       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('            + 'SELECT TOP ' + STR(@PageSize) + ' '            + @FieldList + ' FROM '           + @TableName + @new_where2 + @PrimaryKey + ' < '           + '(SELECT MIN(' + @PrimaryKey + ') FROM (SELECT TOP '           + STR(@TotalCount-@PageSize*@PageIndex) + ' ' + @PrimaryKey            + ' FROM ' + @TableName           + @new_where1 + @new_order2 +' ) AS TMP) '+ @new_order2            + ' ) AS TMP ' + @new_order1      END    END   IF @SortType = 2 --仅主键反序排序    BEGIN     IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2 --正向检索      BEGIN       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM '            + @TableName + @new_where2 + @PrimaryKey + ' < '           + '(SELECT MIN(' + @PrimaryKey + ') FROM (SELECT TOP '           + STR(@PageSize*(@PageIndex-1)) + ' ' + @PrimaryKey            +' FROM '+ @TableName           + @new_where1 + @new_order1 + ') AS TMP) '+ @new_order1           END      ELSE --反向检索      BEGIN       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ('            + 'SELECT TOP ' + STR(@PageSize) + ' '            + @FieldList + ' FROM '           + @TableName + @new_where2 + @PrimaryKey + ' > '           + '(SELECT MAX(' + @PrimaryKey + ') FROM (SELECT TOP '           + STR(@TotalCount-@PageSize*@PageIndex) + ' ' + @PrimaryKey            + ' FROM ' + @TableName           + @new_where1 + @new_order2 +' ) AS TMP) '+ @new_order2            + ' ) AS TMP ' + @new_order1      END     END       IF @SortType = 3 --多列排序,必须包含主键,且放置最后,否则不处理    BEGIN     IF CHARINDEX(',' + @PrimaryKey + ' ',',' + @Order) = 0      BEGIN PRINT('ERR_02') RETURN END     IF @PageIndex <= CEILING((@TotalCount+0.0)/@PageSize)/2 --正向检索      BEGIN       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '           + 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '           + ' SELECT TOP ' + STR(@PageSize*@PageIndex) + ' ' + @FieldList           + ' FROM ' + @TableName + @new_where1 + @new_order1 + ' ) AS TMP '           + @new_order2 + ' ) AS TMP ' + @new_order1       END     ELSE --反向检索      BEGIN       SET @Sql = 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '            + 'SELECT TOP ' + STR(@PageSize) + ' ' + @FieldList + ' FROM ( '           + ' SELECT TOP ' + STR(@TotalCount-@PageSize*@PageIndex+@PageSize) + ' ' + @FieldList           + ' FROM ' + @TableName + @new_where1 + @new_order2 + ' ) AS TMP '           + @new_order1 + ' ) AS TMP ' + @new_order1      END    END  END PRINT(@Sql) EXEC(@Sql)GO

2、SQL Server 中调用测试代码

--执行存储过程declare @TotalCount int,    @TotalPageCount intexec P_viewPage 'T_Module','*','ModuleID','','',1,0,10,1,@TotalCount output,@TotalPageCount outputSelect @TotalCount,@TotalPageCount;

asp.net 代码实现:

#region ===========通用分页存储过程===========  public static DataSet RunProcedureDS(string connectionString, string storedProcName, IDataParameter[] parameters, string tableName)  { using (SqlConnection connection = new SqlConnection(connectionString)) {   DataSet dataSet = new DataSet();   connection.Open();   SqlDataAdapter sqlDA = new SqlDataAdapter();   sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);   sqlDA.Fill(dataSet, tableName);   connection.Close();   return dataSet; }  }  ///   /// 通用分页存储过程  ///   ///   ///   ///   ///   ///   ///   ///   ///   ///   ///   ///   ///   ///   public static DataSet PageList(string connectionString, string tblName, string strGetFields, string primaryKey, string strWhere, string strOrder, int sortType, int recordCount, int PageSize, int PageIndex,ref int totalCount,ref int totalPageCount)  { SqlParameter[] parameters ={ new SqlParameter("@TableName ",SqlDbType.VarChar,200),  new SqlParameter("@FieldList",SqlDbType.VarChar,2000),  new SqlParameter("@PrimaryKey",SqlDbType.VarChar,100),  new SqlParameter("@Where",SqlDbType.VarChar,2000),  new SqlParameter("@Order",SqlDbType.VarChar,1000),  new SqlParameter("@SortType",SqlDbType.Int),  new SqlParameter("@RecorderCount",SqlDbType.Int),  new SqlParameter("@PageSize",SqlDbType.Int),  new SqlParameter("@PageIndex",SqlDbType.Int),  new SqlParameter("@TotalCount",SqlDbType.Int),  new SqlParameter("@TotalPageCount",SqlDbType.Int)}; parameters[0].Value = tblName; parameters[1].Value = strGetFields; parameters[2].Value = primaryKey; parameters[3].Value = strWhere; parameters[4].Value = strOrder; parameters[5].Value = sortType; parameters[6].Value = recordCount; parameters[7].Value = PageSize; parameters[8].Value = PageIndex; parameters[9].Value = totalCount; parameters[9].Direction = ParameterDirection.Output; parameters[10].Value = totalPageCount; parameters[10].Direction = ParameterDirection.Output; DataSet ds = RunProcedureDS(connectionString, "P_viewPage", parameters, "PageListTable"); totalCount = int.Parse(parameters[9].Value.ToString()); totalPageCount = int.Parse(parameters[10].Value.ToString()); return ds;  }  #endregionDataSet ds = SqlHelper.PageList(SqlHelper.LocalSqlServer, "T_User", "*", "UserID", "", "", 1, 0, pageSize, 1, ref totalCount, ref totalPageCount);this.RptData.DataSource = ds;this.RptData.DataBind();

关于asp.net中怎么调用sql存储过程问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。

过程 存储 排序 检索 问题 代码 字符 数据 方法 更多 页数 帮助 解答 易行 郁闷 简单易行 倒序 内容 字段 小伙 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司起名 互联网最新的科技有限公司 金融科技 互联网金融 互联网科技公司电话 宜安科技 互联网金融 苏州互联网科技贷款公司 互联网科技论坛 深圳国际航运科技和互联网 科技互联网的估值 须眉科技是互联网公司吗 宁夏科技产业互联网案例 青岛科技大学互联网大赛研究生 21世纪互联网科技成就 风投北京互联网科技 互联网与数字科技关系 福建互联网展示科技馆设计 吉林省码上互联网科技电话 互联网科技和医药行业 数字互联网科技有限公司 杭州融税互联网科技有限公司 互联网金融 科技金融 深圳互联网络科技有限公司 海南购全球互联网科技 西藏七维空间互联网科技有限公司 小米互联网科技园设置 互联网科技革命什么开始 佛山市翊博互联网络科技有限公司 明优互联网科技有限公司 互联网时代科技型公司的机会 宁波允成互联网科技有限公司
0