根据返回值类型的不同我们可以将存储过程分为三类返回记录集的存储过程返回数值的存储过程(也可以称为标量存储过程)以及行为存储过程
()执行一个没有参数的存储过程的代码如下
SqlConnection conn=new SqlConnection(connectionString)
SqlDataAdapter da = new SqlDataAdapter()
daSelectCommand = new SqlCommand()
daSelectCommandConnection = conn;
daSelectCommandCommandText = NameOfProcedure;
daSelectCommandCommandType = CommandTypeStoredProcedure;
然后只要选择适当的方式执行此处过程用于不同的目的即可
()执行一个有参数的存储过程的代码如下(我们可以将调用存储过程的函数声明为ExeProcedure(string inputdate))
SqlConnection conn=new SqlConnection(connectionString)
SqlDataAdapter da = new SqlDataAdapter()
daSelectCommand = new SqlCommand()
daSelectCommandConnection = conn;
daSelectCommandCommandText = NameOfProcedure;
daSelectCommandCommandType = CommandTypeStoredProcedure;
(以上代码相同以下为要添加的代码)
param = new SqlParameter(@ParameterName SqlDbTypeDateTime)
paramDirection = ParameterDirectionInput;
paramValue = ConvertToDateTime(inputdate)
daSelectCommandParametersAdd(param)
这样就添加了一个输入参数
若需要添加输出参数
param = new SqlParameter(@ParameterName SqlDbTypeDateTime)
paramDirection = ParameterDirectionOutput;
paramValue = ConvertToDateTime(inputdate)
daSelectCommandParametersAdd(param)
若要获得参储过程的返回值
param = new SqlParameter(@ParameterName SqlDbTypeDateTime)
paramDirection = ParameterDirectionReturnValue;
paramValue = ConvertToDateTime(inputdate)
daSelectCommandParametersAdd(param)
从上面的代码我们可以看出当存储过程比较多或者存储过程的参数比较多时这种方法会大大影响开发的速度另外一方面如果项目比较大那么这些用于数据库逻辑的函数在以后的维护中也是一个很大的负担那么有没有一种改进的方法可以解决这个问题呢?想到在执行没有参数的存储过程时只需要传入一个存储过程的名字就可以调用相应的存储过程而且在SqlServer数据库中我们可以直接在查询分析器中敲入存储过程名(参数列表)样的字符串就可以执行存储过程那么是否可以把这种思想应用到应用程序中呢?
于是在编译器中键入相应代码这些代码是在调用不带参数的存储过程的代码的基础上改的具体代码如下
SqlConnection conn=new SqlConnection(connectionString)
SqlDataAdapter da = new SqlDataAdapter()
daSelectCommand = new SqlCommand()
daSelectCommandConnection = conn;
daSelectCommandCommandText = NameOfProcedure(paraparapara);
daSelectCommandCommandType = CommandTypeStoredProcedure;
为了使代码更具有代表性要调用的存储过程的第一个和第二个参数都为字符串类型第三个参数为整型执行以后发现完全可以达到预期的效果!
两种调用方法的比较
通过比较我们可以看到第二种方法具有一个很明显的优点那就是可以提高开发速度节省开发时间而且代码容易维护在一定程度上也减少了系统大小但是由于对存储过程参数的处理比较笼统如果要获取输出参数或者得到存储过程的返回值这种方法就不能满足需要了虽然如此但是这种方法毕竟可以让开发人员少些很大一部分的代码如果不需要获取输出参数和返回值那么几乎可以做到一劳永逸因此在实际的程序开发中这种方法还是具有一定的实用价值的
网上虽然也有很多类似的介绍想对存储过程有个更好的了解征求网友们建议方法有什么好的想法思路拿出来分享下能够更快的提供大家开发进度和效力来