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
投稿

猜你喜欢

  • 一篇文章带你了解Python中的类

    2022-10-11 19:46:18
  • Python实现的knn算法示例

    2022-09-21 14:35:09
  • 探讨各种PHP字符串函数的总结分析

    2024-05-11 10:02:16
  • sql自动增长标识导致导入数据问题的解决方法

    2023-07-04 04:39:22
  • MAC系统IDEA颜值插件MaterialThemeUI

    2022-12-26 00:29:07
  • Go语言操作Excel利器之excelize类库详解

    2024-04-28 09:12:47
  • PHP中include和require的使用详解

    2023-10-22 03:57:03
  • 原生JS实现的简单轮播图功能【适合新手】

    2024-04-27 15:22:44
  • Python OrderedDict字典排序方法详解

    2022-01-07 13:32:09
  • 数据库中identity字段不必是系统产生的唯一值 性能优化方法(新招)

    2011-09-30 11:26:06
  • pycharm新建一个python工程步骤

    2023-08-22 17:42:54
  • Pycharm搭建一个Django项目的方法步骤

    2022-04-12 12:46:41
  • MySQL 4.0 升级到mysql 5.0的方法

    2024-01-18 10:07:12
  • 用JavaScript实现UrlEncode和UrlDecode的脚本代码

    2024-04-10 10:53:47
  • SQL中distinct 和 row_number() over() 的区别及用法

    2024-01-12 20:16:35
  • MySQL 5.7.16 修改密码提示 ERROR 1054 (42S22): Unknown column ''password'' in ''field list''的原因

    2024-01-20 02:43:33
  • PDO::rollBack讲解

    2023-07-23 06:52:34
  • Div+CSS网页布局对SEO的影响漫谈

    2008-08-22 12:58:00
  • Mysql表的约束超详细讲解

    2024-01-20 07:43:11
  • Python配置mysql的教程(推荐)

    2024-01-21 00:40:19
  • asp之家 网络编程 m.aspxhome.com