定义一个根据存储过程名称和存储过程参数数组,执行对应的存储过程的方法。用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. Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装

    原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装 Linux内核分析(一) 从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底 ...

  2. C#动态调用WCF接口

    C#动态调用WCF接口 写在前面 接触WCF还是它在最初诞生之处,一个分布式应用的巨作. 从开始接触到现在断断续续,真正使用的项目少之又少,更谈不上深入WCF内部实现机制和原理去研究,最近自己做一个项 ...

  3. linux Apache安装

    原文:linux Apache安装 1.       下载apache,http://httpd.apache.org/download.cgi  通过这个官方网站,我们可以下到最新的版本.现在版本都 ...

  4. BZOJ 1010: [HNOI2008]玩具包装toy

    职务地址:http :// www . lydsy . com / JudgeOnline / problem . php ? id = 1010 题目大意:见原题. 算法分析: 设s[i]为c[i] ...

  5. Firefox firebug and xpath checker

    From http://blog.sina.com.cn/s/blog_5aefba9a0100csy8.html

  6. .net中的设计模式---单例模式,涉及lock的用法

    .客户端代码 static void Main(string[] args) { Singleton singleton2 = Singleton.GetInstance(); Singleton s ...

  7. JavaEE Tutorials (1) - 概述

    1.1 Java EE 7平台新增特性3 1.2 Java EE应用模型3 1.3 分布式多层应用4 1.3.1 安全4 1.3.2 Java EE组件5 1.3.3 Java EE客户端6 1.3. ...

  8. 算法题C#

    几个大公司(IBM.MicroSoft and so on)面试经典数据结构与算法题C#解答 1.链表反转 我想到了两种比较简单的方法 第一种是需要开一个新的链表,将原链表的元素从后到前的插入到新链表 ...

  9. linux_ubuntu12.04 卸载和安装mysql、远程访问、not allowed

    一: 安装mysql 卸载mysql 第一步 sudo apt-get autoremove --purge mysql-server-5.0 sudo apt-get remove mysql-se ...

  10. Swift中文教程(四)--函数与闭包

    原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: fu ...