定义一个根据存储过程名称和存储过程参数数组,执行对应的存储过程的方法。用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. bzoj 2109 &amp; 2535 空中管制 解读

    [] [分析]小猪真的是一个很好的问题.我认为这是一个问题洪水.建立拓扑后(便! ).直接把最外层设定序号为1,第二层为2.bfs下去就可以. . . 结果发现:飞行序号不能同样.. . 于是開始想. ...

  2. 使用Team Foundation Server 2012源代码管理基本

    原文:使用Team Foundation Server 2012源代码管理基本 本篇体验Team Foundation Server 2012安装及源代码管理.   □ 安装 搜索"team ...

  3. ubuntu分屏终端

    一:更新source 列表: 将/etc/apt/sources.list的镜像源改为网易源:http://mirrors.163.com/ubuntu/dists/ deb http://mirro ...

  4. freemarker定义自己的标签错误(一)

    freemarker定义自己的标记 1.错误描写叙述 freemarker.core.ParseException: Token manager error: freemarker.core.Toke ...

  5. HDOJ 3037 Saving Beans

    如果您有n+1树,文章n+1埋不足一棵树m种子,法国隔C[n+m][m] 大量的组合,以取mod使用Lucas定理: Lucas(n,m,p) = C[n%p][m%p] × Lucas(n/p,m/ ...

  6. stl之map容器的原理及应用

    容器的数据结构同样是采用红黑树进行管理,插入的元素健位不允许重复,所使用的节点元素的比较函数,只对元素的健值进行比较,元素的各项数据可通过健值检索出来.map容器是一种关联容器,实现了SortedAs ...

  7. spark in eclipse---Spark学习笔记3

    想要调试源码,还是要放到eclipse里面去.先生成eclipse项目,下载依赖包 victor@victor-ubuntu:~/software/incubator-spark-0.8.1-incu ...

  8. new 和delete

    转自:http://www.cnblogs.com/charley_yang/archive/2010/12/08/1899982.html 一直对C++中的delete和delete[]的区别不甚了 ...

  9. 被FusionCharts V3.4抛弃的东西

    从FusionCharts Suite XT V3.4開始,FusionCharts产品家族放弃了Flash,发展成为一个纯JavaScript的图表组件.前面我们介绍了怎样升级到V3.4,接下来让我 ...

  10. MVC创建XML,并实现增删改

    原文:MVC创建XML,并实现增删改 如果创建如下的XML: <?xml version="1.0" encoding="utf-8" standalon ...