sqlserver 存储过程动态参数调用实现代码

来源:asp之家 时间:2011-10-24 19:41:22 

只是做笔记,没什么!! 

代码如下:


--创建测试表
CREATE TABLE [dbo].[Student](
[ID] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
[Name] [nvarchar](20) NOT NULL DEFAULT (''),
[Age] [int] NOT NULL DEFAULT (0),
[Sex] [bit] NOT NULL DEFAULT (0),
[Address] [nvarchar](200) NOT NULL DEFAULT ('')
)
--比如是一个查询存储过程
Create PROC GetStudentByType
@type int =0, -- 1根据id查询, 2根据性别查询
@args XML -- 参数都写到这里吧
AS
BEGIN
DECLARE @id INT,@sex BIT
SET @id=@args.value('(args/id)[1]','int') --参数都可以写在这里,如果没有传过来,大不了是null值了,反正也用不到,没关系的
SET @sex =@args.value('(args/sex)[1]','bit')
IF(@type=1)
BEGIN
SELECT * FROM dbo.Student WHERE ID=@id
END
IF(@type=2)
BEGIN
SELECT * FROM dbo.Student WHERE Sex=@sex
END
END


参数写xml里感觉比用字符串要好很多,这样调用时参数就不好组织了,所以这里要有个帮助类XmlArgs 

代码如下:


public class XmlArgs
{
private string _strArgs = string.Empty;
private bool _isCreate = false;
private Dictionary<string, string> _args;
public string Args
{
get
{
if (!_isCreate)
{
_strArgs = _CreateArgs();
_isCreate = true;
}
return _strArgs;
}
}
public XmlArgs()
{
_args = new Dictionary<string, string>();
}
public void Add(string key, object value)
{
_args.Add(key, value.ToString());
_isCreate = false;
}
public void Remove(string key)
{
_args.Remove(key);
_isCreate = false;
}
public void Clear()
{
_args.Clear();
_isCreate = false;
}
private string _CreateArgs()
{
if (_args.Count == 0)
{
return string.Empty;
}
StringBuilder sb = new StringBuilder();
foreach (string key in _args.Keys)
{
sb.AppendFormat("<{0}>{1}</{0}>", key, _args[key]);
}
return sb.ToString();
}
}


调用:

代码如下:


private void BindData()
{
XmlArgs args = new XmlArgs();
args.Add("id", 1);
System.Data.DataTable dt = GetStudentByType(1, args);
GridView1.DataShow(dt);
}
private System.Data.DataTable GetStudentByType(int type, XmlArgs args)
{
SqlHelper helper = new SqlHelper();
helper.Params.Add("type", type);
helper.Params.Add("args", args.Args);
System.Data.DataTable dt = helper.RunDataTable("GetStudentByType");
return dt;
}

标签:存储过程,动态参数
0
投稿

猜你喜欢

  • 使用CSS选择器创建个性化链接样式

    2009-06-02 13:07:00
  • ASP.NET教程第二讲:安装ASP.NET

    2007-08-07 11:59:00
  • SQL SERVER查询所有数据库名,表名,和字段名的语句

    2012-01-05 19:25:26
  • 教你快速实现 MySQL查询结果的分页显示

    2008-11-27 16:17:00
  • 表单系列·出错字段排行榜

    2008-07-01 12:57:00
  • IE window对象介绍

    2008-05-21 18:47:00
  • ASP+MSSQL2000 数据库被批量注入后的解决方法第1/2页

    2011-04-06 10:50:00
  • PHP桥接模式Bridge Pattern的优点与实现过程

    2023-05-25 06:53:44
  • jQuery.data()方法与内存泄漏

    2010-04-06 17:20:00
  • 用CSS设计多种文本框与按钮样式风格

    2007-08-10 13:11:00
  • Google的产品设计指导思想

    2008-03-23 14:15:00
  • ASP环境下邮件列表功能的实现

    2007-10-03 14:25:00
  • oracle chm帮助文件下载

    2010-07-16 12:49:00
  • ASP的数据命名有什么规则吗?

    2009-10-28 18:23:00
  • 打造设计你自己的字体 Ⅲ

    2008-03-14 07:52:00
  • 解析ASP的Application和Session对象

    2007-09-14 10:13:00
  • CSS的优先级与特殊性

    2008-06-24 11:36:00
  • ASP JSON类文件的使用方法

    2011-04-30 16:39:00
  • asp随机产生注册用户密码

    2007-10-17 12:33:00
  • ASP 三层架构 Error处理类

    2011-03-16 11:06:00
  • asp之家 网络编程 m.aspxhome.com