+ -
当前位置:首页 → 问答吧 → 新手请教。存储过程返回值问题。

新手请教。存储过程返回值问题。

时间:2011-12-17

来源:互联网

我使用的是实体类方式,
PageModel:
C# code
using System;
using System.Collections.Generic;
using System.Text;

namespace Model
{
    public class PageModel
    {
        private int _PageSize, _PageIndex;
        private int _TotalPage, _TotalNum;
        private string _SetTable, _SetText, _SetWhere, _SetOrder;
        public PageModel()
        {
            _PageSize = 10;
            _PageIndex = 1;
        }
        /// <summary>
        /// 设置每页数量
        /// </summary>
        public int PageSize
        {
            set { _PageSize = value; }
            get { return _PageSize; }
        }
        /// <summary>
        /// 设置当前页
        /// </summary>
        public int PageIndex
        {
            set { _PageIndex = value; }
            get { return _PageIndex; }
        }
        /// <summary>
        /// 获取总页数
        /// </summary>
        public int TotalPage
        {
            set { _TotalPage = value; }
            get { return _TotalPage; }
        }
        /// <summary>
        /// 获取总数
        /// </summary>
        public int TotalNum
        {
            set { _TotalNum = value; }
            get { return _TotalNum; }
        }
        /// <summary>
        /// 设置表名
        /// </summary>
        public string SetTable
        {
            set { _SetTable = value; }
            get { return _SetTable; }
        }
        /// <summary>
        /// 设置字段
        /// </summary>
        public string SetText
        {
            set { _SetText = value; }
            get { return _SetText; }
        }
        /// <summary>
        /// 设置条件
        /// </summary>
        public string SetWhere
        {
            set { _SetWhere = value; }
            get { return _SetWhere; }
        }
        /// <summary>
        /// 设置排序
        /// </summary>
        public string SetOrder
        {
            set { _SetOrder = value; }
            get { return _SetOrder; }
        }
    }
}

现在这样写的:C# code

        public DataSet GetDataSet(PageModel pm)
        {
            DataSet ds = new DataSet();
            DBConn dbConn = new DBConn();
            SqlConnection conn = dbConn.getConn();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandText = "sp_Page";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@TableName", SqlDbType.VarChar, 50).Value = pm.SetTable;
            cmd.Parameters.Add("@TextString", SqlDbType.VarChar, 2000).Value = pm.SetText;
            cmd.Parameters.Add("@OrderString", SqlDbType.VarChar, 1000).Value = pm.SetOrder;
            cmd.Parameters.Add("@WhereString", SqlDbType.VarChar, 500).Value = pm.SetWhere;
            cmd.Parameters.Add("@PageSize", SqlDbType.Int, 4).Value = pm.PageSize;
            cmd.Parameters.Add("@PageIndex", SqlDbType.Int, 4).Value = pm.PageIndex;
            conn.Open();
            //取总页数
            pm.TotalPage = dbConn.GetInt32(cmd.Parameters.Add("@TotalPage", SqlDbType.Int, 4).Value);
            //取总数
            pm.TotalNum = dbConn.GetInt32(cmd.Parameters.Add("@TotalRecord", SqlDbType.Int, 4).Value);
            //-------------------------------------------
            SqlDataAdapter da = new SqlDataAdapter(cmd);
            da.Fill(ds);
            conn.Close();
            cmd.Dispose();
            return ds;
        }

//取总页数
  pm.TotalPage = dbConn.GetInt32(cmd.Parameters.Add("@TotalPage", SqlDbType.Int, 4).Value);
  //取总数
  pm.TotalNum = dbConn.GetInt32(cmd.Parameters.Add("@TotalRecord", SqlDbType.Int, 4).Value);

取到值的值。总是0。

下面是存储过程:
CREATE PROCEDURE [dbo].[sp_Page]
(
@TableName varchar(50), --表名
@TextString varchar(2000) = '*', --字段名(全部字段为*)
@OrderString varchar(1000), --排序字段(必须!支持多字段不用加order by)
@WhereString varchar(500) =N'', --条件语句(不用加where)
@PageSize int = 10, --每页多少条记录
@PageIndex int = 1 , --指定当前为第几页
@TotalPage int = 0 output, --总页数
@TotalRecord int = 0 output --返回总记录数
)
.....................................

调试了半天。显示的总是:0

作者: ChinaXtHuLang   发布时间: 2011-12-17

是我给的分少了还是问的太难了

作者: ChinaXtHuLang   发布时间: 2011-12-17

引用 1 楼 chinaxthulang 的回复:

是我给的分少了还是问的太难了


小克死
我给你优化一下
C# code
public List<Dictionary<string, object>> SearchByProc(Dictionary<string, object> arr, string procName)
        {
            SqlConnection con = null;
            try
            {
                con = getCon();
                //存储过程名称
                SqlCommand cmmd = new SqlCommand(procName, con);
                //指定命令对象的执行类型为存储过程
                cmmd.CommandType = CommandType.StoredProcedure;
                //存储过程参数
                foreach (KeyValuePair<string, object> kv in dic)
                {
                    cmmd.Parameters.AddWithValue("@" + kv.Key, kv.Value);
                }
                 SqlDataAdapter da = new SqlDataAdapter(cmmd);
                DataTable dt = new DataTable();
                da.Fill(dt);

                //大袋子
                List<Dictionary<string, object>> lst = new List<Dictionary<string, object>>();
                foreach (DataRow dr in dt.Rows)
                {
                    //小袋子
                    Dictionary<string, object> dic = new Dictionary<string, object>();
                    foreach (DataColumn column in dt.Columns)
                    {
                        dic.Add(column.ColumnName, dr[column.ColumnName]);
                    }
                    lst.Add(dic);
                }
                return lst;
            }
            catch (Exception ex)
            {
                Console.Write(ex.Message);
                  return null;
            }
            finally
            {
                if (con.State==ConnectionState.Open)
                {
                    con.Close();
                }
            }
        }

作者: vaecnfeilong   发布时间: 2011-12-17

你写的我看不懂。我是新手。

作者: ChinaXtHuLang   发布时间: 2011-12-17