.NET中统一的存储过程调用方法(收藏)
摘要:在一个项目的开发中,经常会调用数据库中的存储过程。可是,几乎所有存储过程的调用都是同一个模式,主要区别就在于创建的每个参数类型、值等不一样。那么,能不能实现通过一个函数(或者类)调用所有的存储过程呢?本文在利用数据库提供的系统表原理上,实现了统一调用的方法,该方法只需要提供要调用的存储过程名,以及调用时提供具体的参数值就可实现任何存储过程的调用。
// 获得和创建存储过程的参数
private void GetProcedureParameter(params object[] parameters)
{
SqlCommand myCommand2 = new SqlCommand();
myCommand2.Connection = this.myConnection;
myCommand2.CommandText = "select * from INFORMATION_SCHEMA.PARAMETERS where SPECIFIC_NAME='" +this.ProcedureName+ "' order by ORDINAL_POSITION";
SqlDataReader reader = null;
reader = myCommand2.ExecuteReader();
// 创建返回参数
myParameter = new SqlParameter();
myParameter.ParameterName = "@Value";
myParameter.SqlDbType = SqlDbType.Int;
myParameter.Direction = ParameterDirection.ReturnValue;
myCommand.Parameters.Add(myParameter);
int i = 0;
// 创建各个参数,在这个地方可以自动的创建SqlParameter的类型,值,方向等属性
while(reader.Read())
{
myParameter = new SqlParameter();
myParameter.ParameterName = reader["PARAMETER_NAME"].ToString();
myParameter.Direction = reader["PARAMETER_MODE"].ToString()=="IN"?ParameterDirection.Input:ParameterDirection.Output;
switch(reader["DATA_TYPE"].ToString())
{
case "int" :
if(myParameter.Direction == ParameterDirection.Input)
myParameter.Value = (int)parameters[i];
myParameter.SqlDbType = SqlDbType.Int;
break;
//...省略了很多具体的类型处理
default : break;
}
i++;
myCommand.Parameters.Add(myParameter);
}
}
public SqlResult Call(params object[] parameters)
{
// SqlResult是自己定义的用于保存结果数据集、返回值、传出参数集的类
SqlResult result = new SqlResult();
// 根据需要定义自己的连接字符串
myConnection = new SqlConnection(ConnectionString);
myCommand = new SqlCommand(this.ProcedureName, myConnection);
myCommand.CommandType = CommandType.StoredProcedure;
SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand);
myConnection.Open();
// 获得和创建存储过程的参数,并且设置好值
GetProcedureParameter(parameters);
myAdapter.Fill(result.dataSet, "Table");
// 获得存储过程的传出参数值和名字对,保存在一个Hashtable中
GetOutputValue(result);
// 在这里释放各种资源,断开连接
myAdapter.Dispose();
myCommand.Dispose();
myConnection.Close();
myConnection.Dispose();
return result;
}
转载于:https://www.cnblogs.com/ivanyb/archive/2008/02/16/1070968.html
.NET中统一的存储过程调用方法(收藏)相关推荐
- 在mybatis用mysql的代码块_关于Mybatis 中使用Mysql存储过程的方法
1.存储过程的简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用 ...
- [转载]:C#两种不同的存储过程调用方法
两种不同的存储过程调用方法 为了突出新方法的优点,首先介绍一下在.NET中调用存储过程的"官方"方法.另外,本文的所有示例程序均工作于SqlServer数据库上,其它情况类似,以后 ...
- java中如何使用反射调用方法以及获得类中的属性
使用反射获取类中的方法: 1):获取方法所在类的字节码对象. 2):获取方法. ------------------------------------------------------------ ...
- Struts2中Action的动态调用方法
在Struts2中,Action执行的时候并不一定要执行execute,我们可以指定Action执行哪个方法,下面分别介绍三种方法来指定Action执行哪个方法: 1.第一种方法,通过Action里的 ...
- 利用.Net中的反射动态调用方法
.Net中的反射功能是极其强大的,本篇先用他来动态调用方法 看如下一个类 Public Class A { public void InvokeMethod(string methodname) { ...
- js中闭包函数的调用方法
function fn() {let num = 10 // 只能在函数里面使用,外面看不到---- 数据私有化console.log('外');return function g() {num++c ...
- mysql数据库存储过程及调用方法
mysql数据库存储过程及调用方法 mysql5.0以后就支持存储过程了,目前mysql的6.0Alpha版也已经推出.6.0不仅支持大型数据库如oracle等的绝大部分功 能,如存储过程.视图.触发 ...
- Spring中利用applicationContext.xml文件实例化对象和调用方法
Spring中实例化对象和调用方法入门 1.jar包和xml的准备 已上传至百度云盘,链接: https://pan.baidu.com/s/1CY0xQq3GLK06iX7tVLnp3Q 提取码: ...
- SQL Server中的部分存储过程
介绍 (Introduction) SQL is an old language - almost 50 years! The first commercially-available version ...
最新文章
- 有关C/C++中,表达式计算顺序的问题,以及表达式内部变量“副作用”问题(转)...
- 工业4.0进行时:工业机器人为何能够快速爆发?
- 关于DataGridViewComboBoxColumn的二三事
- 超适合新手的Oracle查询语句
- python自带编译器如何生成exe_别再问我怎么Python打包成exe了!
- WEBTIMER控件研究的心得:丢开书本做一个WebTimer
- win linux 远程桌面连接,Windows 连接 Ubuntu 16.04 远程桌面
- 颠覆认知!完美赌徒,到底是如何用数学打造经济神话?!
- C 获得程序执行时间
- eas库存状态调整单不能反审核_把握 商品 周转,做好 动态 库存 管理
- 数据库原理(一)—— 关系代数
- 14.企业应用架构模式 --- Web表现模式
- UnityWebReqest和WWW,请求web数据打包到Android手机上,报错 Unknown error记录
- (二) GNU/GCC 编译器及其编译流程概述
- 金融资产收益率计算中百分比收益率和对数收益率有什么区别?
- 熊出没电锯机器人哪一集_熊出没伐木机器人第几集 熊出没光头强造伐木机器人是哪一集?...
- 国家税务总局全国增值税发票查验平台-客户端
- 三天打鱼两天晒网的直接差距
- hello.i 预处理文件
- 星形接法和三角形接法电压和电流关系
热门文章
- 大数据_Flink_流式处理_简介_认识一下什么是BI中的ETL---Flink工作笔记0005
- Netty工作笔记0071---Protobuf传输多种类型
- SpringCloud工作笔记73---Http协议操作工具集合
- ARCGIS地理信息系统学习笔记001--认识ARCGIS
- DOTNET零碎要点---1.vb.net利用Oracle.DataAccess.dll链接Oracle数据库
- cocos2d-x之 利用富文本控件解析xhml标签(文字标签,图片标签,换行标签,标签属性)...
- 半小时让你成为EXCEL高手
- Spring + Spring MVC + mybatis 下的 junit4 注入单元测试
- 无锡 计算机学校排名,无锡中职学校有哪些 前20排名
- 禅道测试套件怎么用_【分享】—如何学习软件测试