定义一个根据存储过程名称和存储过程参数数组,执行对应的存储过程的方法。用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. sql查询第二大的记录(转)

    问题: 数据库中人表有三个属性,用户(编号,姓名,身高),查询出该身高排名第二的高度.建表语句 create table users ( id ,) primary key, name ), heig ...

  2. DDD Reference

    版权声明:本文博客原创文章.博客,未经同意,不得转载.

  3. STM32电源管理

     (1)3时钟模式 ①睡眠模式②停止模式③待机模式 1.睡眠模式:Cortex-M3内核(理解为CPU)停止工作,CPU供电1.8V有着,周边任何执行.执行 2.停机模式:全部时钟都停止,CPU电 ...

  4. Python入门教程 超详细1小时学会Python(转)

    假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从192.168.0.101到192.168.0.200. 思路:用shell编程.(Linux通常是bash而Windows ...

  5. C# Windows Schedule task此次收购task下一步执行时间

    最近进行了一次需求和Windows Schedule task相关职能,通过schedule,计算下一次运行task时间. 它用于由第三方DLL实现,以下网站,以下载来自: http://tasksc ...

  6. 大数据系列修炼-Scala课程04

    Scala中继承实现:超类的构造.字段重写.方法重写 关于超类的构建:超类可以在子类没有位置的限制,可以在子类中调用父类的方法 类中字段重写:在重写字段前面加一个override就可以重新赋值 类中方 ...

  7. java流下载

    @RequestMapping("/pluginDownload") public void pluginDownload(HttpServletResponse response ...

  8. csdn 博客,你很努力,有人帮你-2015年03一个月17日本

    今天泛化 开始使用简书 正则表达式的博客写了两篇文章 回顾 Core Data 基本使用 总结 Xcode6新特性 简单聊聊 简书,事实上一開始学 MarkDown 语法的时候,已经用了,但是,一直认 ...

  9. HDU2586

    最近的共同祖先反复问的问题. #include <iostream> #include <algorithm> #include <vector> #include ...

  10. 熊猫猪新系统測试之三:iOS 8.0.2

    本来本猫要等到8.1版本号出来后再做測试的,结果等来等去就是迟迟不推送更新呀!说好10月20号的iOS 8.1呢?为了一鼓作气写完,就先不等了.先拿手头的iOS 8.0.2系统做一下測试吧! 8.x系 ...