新手请教。存储过程返回值问题。
时间:2011-12-17
来源:互联网
我使用的是实体类方式,
PageModel:
C# code
现在这样写的:C# code
//取总页数
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
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28