c#定义一个方法,根据存储过程名称和存储过程参数数组,执行对应的存储过程
定义一个根据存储过程名称和存储过程参数数组,执行对应的存储过程的方法。用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#定义一个方法,根据存储过程名称和存储过程参数数组,执行对应的存储过程的更多相关文章
- 定义一个Person类,其中包括:1.定义属性:姓名、年龄、民族作为成员变量。定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化。3.定义多个方法:分别显示相应的属性值,例如getName(){System.out.print("名称="+name+";"); }4.定义一个方法“成长”:实现年龄的增加,每执行一次年龄增加1
题目显示不全,完整题目描述: (1)定义一个Person类,其中包括:1.定义属性:姓名:年龄:民族作为成员变量.定义静态成员变量:人数2.定义构造方法:对成员变量进行初始化.3.定义多个方法:分别显 ...
- 在主方法中定义一个大小为50的一维整型数组,数组i名为x,数组中存放着{1,3,5,…,99}输出这个数组中的所有元素,每输出十个换一行
package hanqi; import java.util.Scanner; public class Test7 { public static void main(String[] args) ...
- 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)
定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容.提示(可以了解python的urllib模块) import urllib.request def get_ ...
- #定义一个方法get_num(num),num参数是列表类型,判断列表里面的元素为数字类型。其他类型则报错,并且返回一个偶数列表:(注:列表里面的元素为偶数)。
#定义一个方法get_num(num),num参数是列表类型,判断列表里面的元素为数字类型.其他类型则报错,并且返回一个偶数列表:(注:列表里面的元素为偶数). def get_num(num): i ...
- C#定义一个方法的3种形式
[定义方法对象,可使用签名兼容的委托变量来引用它] 1.定义一个方法,采用常规标准写法(V1.0) [本质上是签名兼容的委托类型的实例 / 对象] 2.定义一个方法,采用匿名方法(delegate)( ...
- 一道前端面试题:定义一个方法将string的每个字符串间加个空格返回,调用的方式'hello world'.spacify();
偶然在群里看到了这道题:定义一个方法将string的每个字符串间加个空格返回,调用的方式'hello world'.spacify(); 这道题主要是对JavaScript对象原型的考察.
- 创建一个People类型,有年龄、工资、性别三个属性。 定义一个方法叫做找对象,找对象方法传过来一个人;
创建一个People类型,有年龄.工资.性别三个属性. 定义一个方法叫做找对象,找对象方法传过来一个人: 首先如果性别相同,就输出"我不是同性恋", 如果对方是男的,年龄小于28, ...
- 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 ...
- C#如何定义一个变长的一维和二维数组
1.假设将要定义数组的长度为程序执行过程中计算出来的MAX List<int> Arc = new List<int>(); ; i < MAX; i++) { Arc. ...
随机推荐
- Codeforces Round #271 (Div. 2) E题 Pillars(线段树维护DP)
题目地址:http://codeforces.com/contest/474/problem/E 第一次遇到这样的用线段树来维护DP的题目.ASC中也遇到过,当时也非常自然的想到了线段树维护DP,可是 ...
- C#管理控制IIS7的方法
原文:C#管理控制IIS7的方法 转自 http://www.lob.cn/jq/csyy/7285.shtml 把在找到正确方法前遇到的挫折也拿出来与大家分享,相信不少朋友从iis6到iis7的过渡 ...
- Log4j 2.0在具体解释发展先进的使用—SocketAppender远程输出(五岁以下儿童)
Log4j2的Appenders充分考虑输出日志事件.包装和过滤可以被转发,它包含的主要输出到本地文件.输出到远程主机, 文件包.注射.而且,根据该日志文件的时间点.自己主动文件大小的储存条件. 例如 ...
- Java设计模式偷跑系列(十八)建模和责任链模式的实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40018231 责任链模式(ChainOfResponsibility): 有多个对象,每一 ...
- TortoiseGit安装与配置(转)
TortoiseGit 简称 tgit, 中文名海龟Git. 海龟Git只支持神器 Windows 系统, 有一个前辈海龟SVN, TortoiseSVN和TortoiseGit都是非常优秀的开源的版 ...
- Oracle 使用
Oracle 日志文件 摘要: 本篇博文呢主要是介绍 Oracle 日志文件的管理, 对 Oracle 日志文件呢,有两个比较关键的名词, 即日志文件组 LogFileGroup 和日志文件 LogF ...
- oracle_修改Oracle数据库字符集 AL32UTF8;
修改数据库字符集 以支持维文等 utf8 停掉库 进入装载模式 ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_ ...
- DirectX11 学习笔记3 - 创建一个立方体 和 轴
该方案将在进一步的程序 面向对象. 独立的模型类.更像是一个框架. 其中以超过遇到了一个非常有趣的问题,.获得一晚.我读了好几遍,以找到其他的列子.必须放在某些功能Render里面实时更新,而不是仅仅 ...
- webBrowser.execWB的完整说明
原文:webBrowser.execWB的完整说明 在不是js打开的页面上按window.close(), 会有提示框,很烦,现在可以不用了,没有提示框直接关闭窗口.试试下面代码: <objec ...
- 再谈IE的浏览器模式和文档模式
原文:再谈IE的浏览器模式和文档模式 以前在 “IE8兼容视图(IE7 mode)与独立IE7的区别”一文中曾经涉及过浏览器模式和文档模式,但二者的区别却不甚了了,现在有了新的认识,再补充一下. 1. ...