定义一个根据存储过程名称和存储过程参数数组,执行对应的存储过程的方法。用SqlParameter[]代替存储过程需要的参数。这样就不用为每一个存储过程写一个方法了

1、首先定义一个ExcuteProcedure()方法,执行存储过程,并返回第一行第一列的结果

public static object ExcuteProcedure(string proName, SqlParameter[] paramt)
{
    using (SqlCommand command = new SqlCommand())
    {
        object returnInfo = string.Empty;
        command.Connection = conn; //定义的SqlConnention对象
        command.CommandText = proName;
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.AddRange(paramt);
        command.Connection.Open();
        try
        {
            returnInfo = command.ExecuteScalar();
        }
        catch
        {
            //return "False";
        }
        finally
        {
            command.Connection.Close();
        }
        return returnInfo;
    }
}

2、再定义一个方法,执行存储过程,并返回结果集

public static DataSet ExcuteProcedureDS(string proName, SqlParameter[] paramt)
{
    using (SqlCommand command = new SqlCommand())
    {
        command.Connection = conn;
        command.CommandText = proName;
        command.CommandType = CommandType.StoredProcedure;
        command.Parameters.AddRange(paramt);
        command.Connection.Open();
        using (SqlDataAdapter sda = new SqlDataAdapter())
        {
            DataSet ds = new DataSet();
            sda.SelectCommand = command;
            try
            {
                sda.Fill(ds);
                return ds;
            }
            catch
            {
                return null;
            }
            finally
            {
                conn.Close();
                ds.Dispose();
            }
        }
    }
}

3、然后就可以传递存储过程名称和SqlParameter[]数组,调用这两个方法执行对应存储过程。

比如有这样的一个存储过程:该存储过程有5个参数。

USE [mydb]
GO
/****** Object:  StoredProcedure [dbo].[ProUpUserList]    Script Date: 03/30/2014 12:30:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- 作者:        <毛泽西>
-- 英文名:     <tracine>
-- 创建日期: <2014/3/30>
-- 描叙:    <更新用户表>
-- =============================================
ALTER proc [dbo].[ProUpUserList]
(
    ),
    ),
    ),
    ),
    )
)
as
    declare @count int
    select @count=COUNT(*) from UserList where UserName=@UserName

        begin
            select '用户不存在' as 'result'
        end
    else
    begin
        begin tran Up
            declare @DeptID int,@RoleID int
            select @DeptID=DepartID from DepartmentList where DepartmentName=@DeptName
            select @RoleID=RoleID from RoleList where RoleName=@RoleName
            update UserList set Name=@Name,UserName=@UserName,DepartID=@DeptID,RoleID=@RoleID,UserPassword=@UserPassword
            where UserName=@UserName

                begin
                    rollback tran Up
                    select '修改失败' as 'result'
                end
            else
                begin
                    commit tran Up
                    select '修改成功' as 'result'
                end
    end

调用执行存储过程代码:

SqlParameter[] parameter = new SqlParameter[]
{
    //存储过程5个参数名称以及参数类型
    new SqlParameter("),
    new SqlParameter("),
    new SqlParameter("),
    new SqlParameter("),
    new SqlParameter("),
};
//存储过程5个参数的值
parameter].Value = name;
parameter].Value = userName;
parameter].Value = name;
parameter].Value = departName;
parameter].Value = roleName;
//调用执行存储过程的方法
string result = SQLdbHelper.ExcuteProcedure("ProUpUserList", parameter).ToString();

只是这种方法不适合应用与WebService,因为它不支持SqlParameter类型,无法进行参数传递

c#定义一个方法,根据存储过程名称和存储过程参数数组,执行对应的存储过程的更多相关文章

  1. 定义一个Person类,其中包括:1.定义属性:姓名、年龄、民族作为成员变量。定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化。3.定义多个方法:分别显示相应的属性值,例如getName(){System.out.print("名称="+name+";"); }4.定义一个方法“成长”:实现年龄的增加,每执行一次年龄增加1

    题目显示不全,完整题目描述: (1)定义一个Person类,其中包括:1.定义属性:姓名:年龄:民族作为成员变量.定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化.3.定义多个方法:分别显 ...

  2. 在主方法中定义一个大小为50的一维整型数组,数组i名为x,数组中存放着{1,3,5,…,99}输出这个数组中的所有元素,每输出十个换一行

    package hanqi; import java.util.Scanner; public class Test7 { public static void main(String[] args) ...

  3. 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)

    定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容.提示(可以了解python的urllib模块) import urllib.request def get_ ...

  4. #定义一个方法get_num(num),num参数是列表类型,判断列表里面的元素为数字类型。其他类型则报错,并且返回一个偶数列表:(注:列表里面的元素为偶数)。

    #定义一个方法get_num(num),num参数是列表类型,判断列表里面的元素为数字类型.其他类型则报错,并且返回一个偶数列表:(注:列表里面的元素为偶数). def get_num(num): i ...

  5. C#定义一个方法的3种形式

    [定义方法对象,可使用签名兼容的委托变量来引用它] 1.定义一个方法,采用常规标准写法(V1.0) [本质上是签名兼容的委托类型的实例 / 对象] 2.定义一个方法,采用匿名方法(delegate)( ...

  6. 一道前端面试题:定义一个方法将string的每个字符串间加个空格返回,调用的方式'hello world'.spacify();

    偶然在群里看到了这道题:定义一个方法将string的每个字符串间加个空格返回,调用的方式'hello world'.spacify(); 这道题主要是对JavaScript对象原型的考察.

  7. 创建一个People类型,有年龄、工资、性别三个属性。 定义一个方法叫做找对象,找对象方法传过来一个人;

    创建一个People类型,有年龄.工资.性别三个属性. 定义一个方法叫做找对象,找对象方法传过来一个人: 首先如果性别相同,就输出"我不是同性恋", 如果对方是男的,年龄小于28, ...

  8. 16.按要求编写Java应用程序。 编写一个名为Test的主类,类中只有一个主方法; 在主方法中定义一个大小为50的一维整型数组,数组名为x,数组中存放着{1, 3,5,…,99}输出这个数组中的所有元素,每输出十个换一行;在主方法中定义一 个大小为10*10的二维字符型数组,数组名为y,正反对角线上存的是‘*’,其余 位置存的是‘#’;输出这个数组中的所有元素。

    //分类 package com.bao; public class Shuchu { int[]yi=new int[50]; String[][]er=new String[10][10]; vo ...

  9. C#如何定义一个变长的一维和二维数组

    1.假设将要定义数组的长度为程序执行过程中计算出来的MAX List<int> Arc = new List<int>(); ; i < MAX; i++) { Arc. ...

随机推荐

  1. CSS hack方式

    史上最全的CSS hack方式一览   做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我们会极不情愿的使用这个不太友好的方式来达到大家要求的页面表现 ...

  2. ASP.NET MVC 3: Razor中的@:和语法

    原文 ASP.NET MVC 3: Razor中的@:和语法 [原文发表地址] ASP.NET MVC 3: Razor’s @: and <text> syntax[原文发表时间] De ...

  3. 安装程序添加iis的方法经验分享

    原文:安装程序添加iis的方法经验分享 网上有一些这样的方法,但我这里主要做一些对比和扩充 网上这方面的文章的岁数比较大,server 08R2和win7出来后,整理这方面的资料的文章没找到,所以这里 ...

  4. 网站的SEO以及它和站长工具的之间秘密(转)

    博客迁移没有注意 URL 地址的变化,导致百度和 google 这两只爬虫引擎短时间内找不到路.近段时间研究了下国内最大搜索引擎百度和国际最大搜索引擎google的站长工具,说下感受. 百度的站长工具 ...

  5. JSP简单的练习-使用JDOM阅读xml文件

    <%@ page contentType="text/html; charset=gb2312" language="java" %> <%@ ...

  6. DevExpress XtraReports 入门四 创建 Web 报表

    原文:DevExpress XtraReports 入门四 创建 Web 报表 本文只是为了帮助初次接触或是需要DevExpress XtraReports报表的人群使用的,为了帮助更多的人不会像我这 ...

  7. ANDROID定义自己的看法——onMeasure,MeasureSpec源代码 过程 思考具体解释

    一个简短的引论: 在他们的定义view什么时候,其实很easy,只需要知道3: 1.測量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGrou ...

  8. java字节中的基本类型的职业的数目 (采访总是问)

    因为移动装置存储器中的移动开发的局限性,数据的字节数需要考虑往往在占领中使用的类型. 下面介绍下一个Java,以加深记忆. 在Java中一共同拥有8种基本数据类型,当中有4种整型,2种浮点类型,1种用 ...

  9. Ubuntu中编译链接Opencv应用的简便方式

    安装完毕Opencv后,使用下面命令查 看编译/连接參数 pkg-config --cflags --libs opencv 可看到例如以下信息 -I/usr/include/opencv  /usr ...

  10. 使用 Eclipse 的 SVN 主要插件创建项目/支/标签

    原文 阅读 Mark Phippard 该博客以及<Subversion 与版本号控制>之后,我了解到 分支/标签 是 SVN 非常棒的特性之中的一个.但我在使用推荐的 "tru ...