SQL Server 2000 通用单表或视图查询存储过程及C#调用示例

7 篇文章 0 订阅
2 篇文章 0 订阅

 create proc Common
@pagesize int, --页大小
@pageindex int,--第几页
@Tbname varchar(50),--表名
@TFields varchar(500),--要查询的字段
@order varchar(20),--显示顺序
@id varchar(20), --列标识名一般为ID号
@whereCondition  varchar(500),  --执行查询的条件不带  where 关键字,
@total int output,
@PageCount int output
as
begin
declare @sqlstr nvarchar(2000)
declare @MaxOrMin char(3)
declare @OpChar char(2)

if len(@order)=3
 begin
  set @MaxOrMin = 'max'
  set @OpChar = '>='
 end
if len(@order)=4
 begin
  set @MaxOrMin = 'min'
  set @OpChar = '<='
 end

set @sqlstr='select @a = count('+@id+') from  '+@Tbname+' where '+@whereCondition
exec sp_executesql @sqlstr,N'@a int output',@total output

if @total % @pagesize = 0
 begin
  set @PageCount = @total / @pagesize
 end
else
 begin
  set @PageCount = (@total / @pagesize)+1
 end
set @sqlstr='select top '+cast(@pagesize as nvarchar)+' '+@TFields+
' from '+@Tbname+'
  where '+@id+' '+@OpChar+'
 (
  select '+@MaxOrMin+' ('+@id+')
  from
  (
   select top '+cast(((@pageindex-1)*@pagesize+1) as nvarchar)+' '+@id+' from '+@Tbname+' where '+@whereCondition+' order by '+@id+' '+@order+'
  )as tblTmp
 ) and '+@whereCondition+' order by '+@id+' '+@order
exec sp_executesql @sqlstr
end

 

 

 

将下面的方法写到C#数据库操作类中将返回一个dataset,将上面的存储过程建在SQLserver2000数据库中,以下示例是asp.net中的调用

 

 //分回一个数据集并利用分页 同时可以得到记录总数及页总数用于列表页显示  一个连接一个command对象,另外还有sqldataadapter,dataset
        public static DataSet getCurrentDataSet(string ggSelectColumns, string ggtableName, string ggwhere, int ggcurpage, int ggpagesize, string ggxuName, string ggorder, out int ggpagecount, out int ggRecordCount)
        {//可以作为一个类方法取得当前数据集

            //接收传入参数列表
            int pagesize = ggpagesize;  //接收页大小
            int curpage = ggcurpage;  //当前第几页

            string where = ggwhere;   //查询的where条件
            string xuName = ggxuName;   //排序字段一般为数据表中记录编号
            string orderName = ggorder;  //用来排序的列名 一般为表记录编号,或时间
            string SelectColumns = ggSelectColumns;   //要选择的列
            string tableName = ggtableName;  //要查询的表名

            //内部使用变量
            //int pagecount;     //符合条件分页数
            //int dblRecordCount;  //符合条件记录数

            //Response.Write("<br>" + sqlstr + "<br>");

            // 打开数据库取得数据到当前记录集
            SqlConnection con = getConnection();
            SqlDataAdapter sd = new SqlDataAdapter();
            SqlCommand cmd = new SqlCommand();

            DataSet ds = new DataSet();

            cmd.CommandText = "Common";
            cmd.Connection = con;
            cmd.CommandType = CommandType.StoredProcedure;

            //传入参数
            SqlParameter param = new  SqlParameter();

            param.ParameterName="@pagesize";  //页大小
            param.DbType= DbType.Int32;
            param.Direction = ParameterDirection.Input;
            param.Value = pagesize;
            cmd.Parameters.Add(param);

            SqlParameter param1 = new SqlParameter();
            param1.ParameterName = "@pageindex"; //第几页
            param1.DbType = DbType.Int32;
            param1.Direction = ParameterDirection.Input;
            param1.Value = curpage;
            cmd.Parameters.Add(param1);

            SqlParameter param2 = new SqlParameter();
            param2.ParameterName = "@Tbname"; //表名
            param2.DbType = DbType.String;
            param2.Direction = ParameterDirection.Input;
            param2.Value = tableName;
            cmd.Parameters.Add(param2);

            SqlParameter param3 = new SqlParameter();
            param3.ParameterName = "@TFields"; //要查询的字段
            param3.DbType = DbType.String;
            param3.Direction = ParameterDirection.Input;
            param3.Value = SelectColumns;
            cmd.Parameters.Add(param3);

            SqlParameter param4 = new SqlParameter();
            param4.ParameterName = "@order"; //排序方式  只取  asc desc
            param4.DbType = DbType.String;
            param4.Direction = ParameterDirection.Input;
            param4.Value = orderName;
            cmd.Parameters.Add(param4);

            SqlParameter param5 = new SqlParameter();
            param5.ParameterName = "@id"; //列标识名一般为ID号或时间
            param5.DbType = DbType.String;
            param5.Direction = ParameterDirection.Input;
            param5.Value = xuName;
            cmd.Parameters.Add(param5);

            SqlParameter param6 = new SqlParameter();
            param6.ParameterName = "@whereCondition"; //查询条件
            param6.DbType = DbType.String;
            param6.Direction = ParameterDirection.Input;
            param6.Value = where;
            cmd.Parameters.Add(param6);

            SqlParameter param7 = new SqlParameter();
            param7.ParameterName = "@total"; //符合条件的记录总数
            param7.DbType = DbType.Int32;
            param7.Direction = ParameterDirection.Output;
            //param7.Value = ggRecordCount;
            cmd.Parameters.Add(param7);

            SqlParameter param8 = new SqlParameter();
            param8.ParameterName = "@PageCount"; //页总数
            param8.DbType = DbType.Int32;
            param8.Direction = ParameterDirection.Output;
            //param8.Value = ggpagecount;
            cmd.Parameters.Add(param8);

            sd.SelectCommand = cmd;

            sd.Fill(ds, "zbinfo");


            ggpagecount = Convert.ToInt32(cmd.Parameters["@PageCount"].Value);
            ggRecordCount = Convert.ToInt32(cmd.Parameters["@total"].Value);

            //释放资源
            con.Close();
            con.Dispose();

            cmd.Dispose();
            sd.Dispose();

            return ds;
        }

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值