• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    sqlserver 存储过程动态参数调用实现代码
    POST TIME:2021-10-18 18:50
    只是做笔记,没什么!!
    复制代码 代码如下:

    --创建测试表
    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 Dictionarystring, string> _args;
    public string Args
    {
    get
    {
    if (!_isCreate)
    {
    _strArgs = _CreateArgs();
    _isCreate = true;
    }
    return _strArgs;
    }
    }
    public XmlArgs()
    {
    _args = new Dictionarystring, 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;
    }
    您可能感兴趣的文章:
    • C# Ado.net实现读取SQLServer数据库存储过程列表及参数信息示例
    • SQL SERVER调用存储过程小结
    • Java中调用SQL Server存储过程详解
    • PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
    • Sql Server 存储过程调用存储过程接收输出参数返回值
    • sqlserver中存储过程的递归调用示例
    • .net下调用sqlserver存储过程的小例子
    • SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值
    • PHP基于PDO调用sqlserver存储过程通用方法【基于Yii框架】
    • SQL Server存储过程在C#中调用的简单实现方法
    上一篇:sqlserver自动增长列引起的问题解决方法
    下一篇:通过分析SQL语句的执行计划优化SQL
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信