C#调用SQL 存储过程的两个方法
来源:互联网 发布:淘宝服装怎么做 编辑:程序博客网 时间:2024/05/22 00:51
(1)减少网络通信量。调用一个行数不多的存储过程与直接调用SQL语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL语句,那么其性能绝对比一条一条的调用SQL语句要高得多。
(2)执行速度更快。有两个原因:首先,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。
(3)更强的适应性:由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。
(4) 布式工作:应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。
由以上的分析可以看到,在应用程序中使用存储过程是很有必要的。
在使用.NET的过程中,数据库访问是一个很重要的部分,特别是在B/S系统的构建过程中,数据库操作几乎成为了一个必不可少的操作。调用存储过程实现数据库操作使很多程序员使用的方法,而且大多数的程序员都是能使用存储过程就使用存储过程,很少直接使用SQL语句,所以存储过程是很有用而且很重要的。
首先介绍一下在.NET中调用存储过程的“官方”方法。(以sql server为例) 要在应用程序中访问数据库,一般性的步骤是:首先声明一个数据库连接SqlConnection,然后声明一个数据库命令SqlCommand,用来执行SQL语句和存储过程。有了这两个对象后,就可以根据自己的需要采用不同的执行方式达到目的。需要补充的是,不要忘记在页面上添加如下的引用语句:using System.Data.SqlClient。
就执行存储过程来说,如果执行的是第一类存储过程,那么就要用一个DataAdapter将结果填充到一个DataSet中,然后就可以使用数据网格控件将结果呈现在页面上了;如果执行的是第二和第三种存储过程,则不需要此过程,只需要根据特定的返回判定操作是否成功完成即可。
(1) 执行一个没有参数的存储过程的代码如下:
SqlConnection conn=new SqlConnection(
“
connectionString
”
);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "NameOfProcedure";
da.SelectCommand.CommandType = CommandType.StoredProcedure;
然后只要选择适当的方式执行此处过程,用于不同的目的即可。
(2) 执行一个有参数的存储过程的代码如下(我们可以将调用存储过程的函数声明为ExeProcedure(string inputdate)):
SqlConnection conn=new SqlConnection(
“
connectionString
”
);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "NameOfProcedure";
da.SelectCommand.CommandType = CommandType.StoredProcedure;
(以上代码相同,以下为要添加的代码)
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = Convert.ToDateTime(inputdate);
da.SelectCommand.Parameters.Add(param);
这样就添加了一个输入参数。若需要添加输出参数那就再需要添加以下代码:
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Output;
param.Value = Convert.ToDateTime(inputdate);
da.SelectCommand.Parameters.Add(param);
若要获得参储过程的返回值,可以使用以下代码
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.ReturnValue;
param.Value = Convert.ToDateTime(inputdate);
da.SelectCommand.Parameters.Add(param);
从上面的代码我们可以看出,当存储过程比较多或者存储过程的参数比较多时,这种方法会大大影响开发的速度;另外一方面,如果项目比较大,那么这些用于数据库逻辑的函数在以后的维护中也是一个很大的负担。那么,有没有一种改进的方法可以解决这个问题呢?想到在执行没有参数的存储过程时只需要传入一个存储过程的名字就可以调用相应的存储过程,而且在SqlServer数据库中我们可以直接在查询分析器中敲入“存储过程名(参数列表)”样的字符串就可以执行存储过程,那么,是否可以把这种思想应用到应用程序中呢?
于是在编译器中键入相应代码。这些代码是在调用不带参数的存储过程的代码的基础上改的。具体代码如下:
SqlConnection conn=new SqlConnection(
“
connectionString
”
);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = new SqlCommand();
da.SelectCommand.Connection = conn;
da.SelectCommand.CommandText = "NameOfProcedure
(’para1’,’para2’,para3)";
da.SelectCommand.CommandType = CommandType.StoredProcedure;
为了使代码更具有代表性,要调用的存储过程的第一个和第二个参数都为字符串类型,第三个参数为整型。执行以后发现,完全可以达到预期的效果!
通过比较我们可以看到,第二种方法具有一个很明显的优点,那就是可以提高开发速度,节省开发时间,而且代码容易维护,在一定程度上也减少了系统大小。但是,由于对存储过程参数的处理比较笼统,如果要获取输出参数或者得到存储过程的返回值,这种方法就不能满足需要了。虽然如此,但是,这种方法毕竟可以让开发人员少些很大一部分的代码。如果不需要获取输出参数和返回值,那么几乎可以做到“一劳永逸”。因此在实际的程序开发中,这种方法还是具有一定的实用价值的。
- C#调用SQL 存储过程的两个方法
- C#调用SQL Server Reports的方法(存储过程)
- c#调用sql存储过程的步骤
- C#调用存储过程的通用方法
- C#调用Oracle存储过程的方法
- C#调用Oracle存储过程的方法
- C#调用Oracle存储过程的方法
- C#调用Oracle存储过程的方法
- C#调用Oracle存储过程的方法
- C#调用存储过程的几个方法
- C#存储过程调用的三个方法
- c# 调用存储过程方法
- iBatis调用返回两个游标的存储过程处理方法
- 存储过程和SQL语句比较及存储过程在C#中调用方法
- 存储过程和SQL语句比较及存储过程在C#中调用方法
- 存储过程和SQL语句比较及存储过程在C#中调用方法(转)
- C# 调用SQL的存储过程的接口及实现
- 使用C#调用SQL Server的存储过程
- 10个管理工作时间的小技巧
- POJ 1236 Network of Schools (强连通分量,块,缩点)
- 如何在ubuntu下使用eclipse cdt8.0
- Flex 3 与Flex 4关于获得顶级应用的区别(学习笔记)
- 如何在Windows下搭建Android开发环境(转)
- C#调用SQL 存储过程的两个方法
- How To Write Map-Reduce OnHadoop
- How to create installation patches for VS.NET deployment projects
- 一次把进制说清楚
- 通过自定义的URL Scheme启动你的App
- MySQL中导入导出使用说明
- flex技术分享学习
- 修改Solaris默认shell
- Hadoop pipes设计原理