2023年6月21日发(作者:)

带参数的存储过程创建带参数的sql存储过程:创建带参数的存储过程⾸先要在存储过程中声明该参数,每个存储过程参数都必须⽤惟⼀的名称进⾏定义。与标准的Transact-SQL变量相同,参数名必须以@为前缀,创建带参数的存储过程创建带参数的存储过程⾸先要在存储过程中声明该参数,每个存储过程参数都必须⽤惟⼀的名称进⾏定义。与标准的Transact-SQL变量相同,参数名必须以@为前缀,并且遵从对象标识符规则。当⽤户不提供该参数的值时可以使⽤⼀个默认值来代替。在执⾏带参数的存储过程时,既可以通过显式指定参数名称并赋予适当的值,也可以通过提供在CREATE PROCEDURE语句中给定的参数值(不指定参数名称)来向存储过程传递值。在存储过程PRO_Student_IN中命名4个参数,其定义顺序为@Chinese、@English、@maths和@class。例如,将值传递给存储过程指定的参数名称。EXEC PRO_Student_IN @class="三年⼀班",@Chinese=85,@maths=85,@English=85例如,按照参数的位置传递,⽽不命名参数名称。EXEC PRO_Student_IN 85,85,85,"三年⼀班"1.不带默认值的参数创建⼀个参数不带默认值的存储过程,在调⽤该存储过程时,必须对存储过程中的所有参数进⾏赋值,如果有⼀个参数没有赋值,则⽆法调⽤该存储过程。下⾯创建⼀个不带参数默认值的存储过程,并通过指定参数的赋值,查询“MR_Student”表中指定班级的学⽣信息。运⾏结果如图1所⽰。图1 创建带参数的存储过程操作步骤如下:(1)在操作系统的任务栏中单击“开始”菜单,选择“程序”→“Microsoft SQL Server”→“查询分析器”命令,打开查询分析器。(2)SQL语句如下:USE MR_SQ --打开创建存储过程的数据库GO--创建存储过程CREATE PROCEDURE PRO_Student_IN@Chinese int, --定义参数@English int,@maths int,@class varchar(20)ASSelect *from MR_Studentwhere 语⽂>@Chinese and 英语>@English and 数学>@maths and 班级=@classGO执⾏PRO_Student_IN存储过程有两种⽅法。(1)按存储过程中参数的顺序对参数进⾏赋值。EXEC PRO_Student_IN 65,77,70,"三年⼀班"(2)执⾏存储过程时,可以按任意顺序对参数进⾏赋值。EXEC PRO_Student_IN @class="三年⼀班",@Chinese=65,@maths=70,@English=772.带默认值的参数在执⾏存储过程PRO_Student_IN时,如果缺省任何⼀个参数,将会产⽣错误,解决这种问题的⽅法是建⽴使⽤默认值的参数。只要在参数的定义之后加上等号,并在等号后⾯写出默认值。例如,给参数设置默认值。@Str varchar(20)='长春',@Int Int=10,@Char char(8)='0001',@float float=12.3本⽰例利⽤存储过程中的默认参数对数据表“MR_Student”进⾏查询。运⾏结果如图2所⽰。

图2 创建带参数默认值的存储过程操作步骤如下:(1)在操作系统的任务栏中单击“开始”菜单,选择“程序”→“Microsoft SQL Server”→“查询分析器”命令,打开查询分析器。(2)SQL语句如下:--创建存储过程USE MR_SQLGOCREATE PROCEDURE PRO_Student_NULL@Chinese int=60, --对参数设置默值@English int=60,@maths int=60,@class varchar(20)='三年⼆班'(责任编辑:admin)ASSelect *from MR_Studentwhere 语⽂>@Chinese and 英语>@English and 数学>@maths and 班级=@classGO执⾏存储过程,查询三年⼆班成绩全部及格并且数学成绩⼤于80的学⽣信息。EXEC PRO_Student_NULL @maths=80也可以⽤以下SQL语句调⽤PRO_Student_NULL存储过程:例如,查询三年⼆班成绩全部及格并且语⽂成绩⼤于70的学⽣信息。EXEC PRO_Student_NULL 70例如,查询三年⼆班成绩全部及格的学⽣信息。EXEC PRO_Student_NULL3.带返回参数的存储过程在创建存储过程时,可以⽤OUTPOT参数来创建⼀个带返回值的存储过程,例如:@int int OUTPUT@char char(10) OUTPUT@float float OUTPUT其中text、image等⼤于⼆进制数据类型的参数不能作为OUTPUT参数,在调⽤存储过程时,不必为返回参数赋值。本⽰例利⽤存储过程中的OUTPUT参数,在调⽤存储过程后利⽤返回值来判断查询的结果。运⾏结果如图3所⽰。图3 创建带返回参数的存储过程操作步骤如下:(1)在操作系统的任务栏中单击“开始”菜单,选择“程序”→“Microsoft SQL Server”→“查询分析器”命令,打开查询分析器。(2)SQL语句如下:--创建带返回值的存储过程CREATE PROCEDURE PRO_OUP@class char(10),@ave int OUTPUT --设置带返回值的参数ASselect @ave =avg(数学) from MR_Student where 班级=@classGO--执⾏存储过程DECLARE @average int --⾃定义变量DECLARE @subject char(10)SET @subject='三年⼀班' --对变量进⾏赋值EXEC PRO_OUP @subject,@average output --调⽤存储过程if @average>=85 --利⽤存储过程的返回值进⾏判断PRINT rtrim(@subject)+'数学的平均成绩为⾼等⽔平'if @average>=70PRINT rtrim(@subject)+'数学的平均成绩为中等⽔平'if @average<70PRINT rtrim(@subject)+'数学的平均成绩为⼀般⽔平'运⾏结果:三年⼀班数学的平均成绩为79,属于中等⽔平(责任编辑:admin)

摘要 存储过程的调⽤在B/S系统中⽤的很多。传统的调⽤⽅法不仅速度慢,⽽且代码会随着存储过程的增多不断膨胀,难以维护。新的⽅法在⼀定程度上解决了这些问题。  关键词 ;存储过程 

  在使⽤.NET的过程中,数据库访问是⼀个很重要的部分,特别是在B/S系统的构建过程中,数据库操作⼏乎成为了⼀个必不可少的操作。调⽤存储过程实现数据库操作使很多程序员使⽤的⽅法,⽽且⼤多数的程序员都是能使⽤存储过程就使⽤存储过程,很少直接使⽤SQL语句,所以存储过程是很有⽤⽽且很重要的。  存储过程简介  简单的说,存储过程是由⼀些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应⽤程序调⽤,也可以从另⼀个过程或触发器调⽤。它的参数可以被传递和返回。与应⽤程序中的函数过程类似,存储过程可以通过名字来调⽤,⽽且它们同样有输⼊参数和输出参数。  根据返回值类型的不同,我们可以将存储过程分为三类:返回记录集的存储过程, 返回数值的存储过程(也可以称为标量存储过程),以及⾏为存储过程。顾名思义,返回记录集的存储过程的执⾏结果是⼀个记录集,典型的例⼦是从数据库中检索出符合某⼀个或⼏个条件的记录;返回数值的存储过程执⾏完以后返回⼀个值,例如在数据库中执⾏⼀个有返回值的函数或命令;最后,⾏为存储过程仅仅是⽤来实现数据库的某个功能,⽽没有返回值,例如在数据库中的更新和删除操作。  使⽤存储过程的好处  相对于直接使⽤SQL语句,在应⽤程序中直接调⽤存储过程有以下好处:  (1)减少⽹络通信量。调⽤⼀个⾏数不多的存储过程与直接调⽤SQL语句的⽹络通信量可能不会有很⼤的差别,可是如果存储过程包含上百⾏SQL语句,那么其性能绝对⽐⼀条⼀条的调⽤SQL语句要⾼得多。  (2)执⾏速度更快。有两个原因:⾸先,在存储过程创建的时候,数据库已经对其进⾏了⼀次解析和优化。其次,存储过程⼀旦执⾏,在内存中就会保留⼀份这个存储过程,这样下次再执⾏同样的存储过程时,可以从内存中直接调⽤。  (3)更强的适应性:由于存储过程对数据库的访问是通过存储过程来进⾏的,因此数据库开发⼈员可以在不改动存储过程接⼝的情况下对数据库进⾏任何改动,⽽这些改动不会对应⽤程序造成影响。  (4) 布式⼯作:应⽤程序和数据库的编码⼯作可以分别独⽴进⾏,⽽不会相互压制。  由以上的分析可以看到,在应⽤程序中使⽤存储过程是很有必要的。  两种不同的存储过程调⽤⽅法  为了突出新⽅法的优点,⾸先介绍⼀下在.NET中调⽤存储过程的“官⽅”⽅法。另外,本⽂的所有⽰例程序均⼯作于SqlServer数据库上,其它情况类似,以后不再⼀⼀说明。本⽂所有例⼦均采⽤C#语⾔。  要在应⽤程序中访问数据库,⼀般性的步骤是:⾸先声明⼀个数据库连接SqlConnection,然后声明⼀个数据库命令SqlCommand,⽤来执⾏SQL语句和存储过程。有了这两个对象后,就可以根据⾃⼰的需要采⽤不同的执⾏⽅式达到⽬的。需要补充的是,不要忘记在页⾯上添加如下的引⽤语句:using ent。  就执⾏存储过程来说,如果执⾏的是第⼀类存储过程,那么就要⽤⼀个DataAdapter将结果填充到⼀个DataSet中,然后就可以使⽤数据⽹格控件将结果呈现在页⾯上了;如果执⾏的是第⼆和第三种存储过程,则不需要此过程,只需要根据特定的返回判定操作是否成功完成即可。  (1)执⾏⼀个没有参数的存储过程的代码如下:SqlConnection conn=new SqlConnection(“connectionString”);SqlDataAdapter da = new SqlDataAdapter();Command = new SqlCommand();tion = conn;dText = "NameOfProcedure";dType = Procedure;  然后只要选择适当的⽅式执⾏此处过程,⽤于不同的⽬的即可。  (2)执⾏⼀个有参数的存储过程的代码如下(我们可以将调⽤存储过程的函数声明为ExeProcedure(string inputdate)):SqlConnection conn=new SqlConnection(“connectionString”);SqlDataAdapter da = new SqlDataAdapter();Command = new SqlCommand();tion = conn;dText = "NameOfProcedure";dType = Procedure;(以上代码相同,以下为要添加的代码)param = new SqlParameter("@ParameterName", me);ion = ; = Time(inputdate);(param);  这样就添加了⼀个输⼊参数。若需要添加输出参数:param = new SqlParameter("@ParameterName", me);ion = ; = Time(inputdate);(param);  若要获得参储过程的返回值:param = new SqlParameter("@ParameterName", me);ion = Value; = Time(inputdate);(param);  从上⾯的代码我们可以看出,当存储过程⽐较多或者存储过程的参数⽐较多时,这种⽅法会⼤⼤影响开发的速度;另外⼀⽅⾯,如果项⽬⽐较⼤,那么这些⽤于数据库逻辑的函数在以后的维护中也是⼀个很⼤的负担。那么,有没有⼀种改进的⽅法可以解决这个问题呢?想到在执⾏没有参数的存储过程时只需要传⼊⼀个存储过程的名字就可以调⽤相应的存储过程,⽽且在SqlServer数据库中我们可以直接在查询分析器中敲⼊“存储过程名(参数列表)”样的字符串就可以执⾏存储过程,那么,是否可以把这种思想应⽤到应⽤程序中呢?  于是在编译器中键⼊相应代码。这些代码是在调⽤不带参数的存储过程的代码的基础上改的。具体代码如下:SqlConnection conn=new SqlConnection(“connectionString”);SqlDataAdapter da = new SqlDataAdapter();Command = new SqlCommand();tion = conn;dText = "NameOfProcedure(’para1’,’para2’,para3)";dType = Procedure;  为了使代码更具有代表性,要调⽤的存储过程的第⼀个和第⼆个参数都为字符串类型,第三个参数为整型。执⾏以后发现,完全可以达到预期的效果!SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=sa;database=yourdatabase")

SqlCommand cmd=new SqlCommand("libsearch",conn);

dType = Procedure;//指⽰libsearch为存储过程

("@name",,20);

ters["@name"].Value=传⼊name的值

("@member_no",,4);

ters["@member_no"].Value=传⼊member_no的值

("@loancount",,4);

ters["@loancount"].Direction=;NonQuery();//执⾏存储过程

string loancount=ters["@loancount"].ng()

//得到值.

2023年6月21日发(作者:)

带参数的存储过程创建带参数的sql存储过程:创建带参数的存储过程⾸先要在存储过程中声明该参数,每个存储过程参数都必须⽤惟⼀的名称进⾏定义。与标准的Transact-SQL变量相同,参数名必须以@为前缀,创建带参数的存储过程创建带参数的存储过程⾸先要在存储过程中声明该参数,每个存储过程参数都必须⽤惟⼀的名称进⾏定义。与标准的Transact-SQL变量相同,参数名必须以@为前缀,并且遵从对象标识符规则。当⽤户不提供该参数的值时可以使⽤⼀个默认值来代替。在执⾏带参数的存储过程时,既可以通过显式指定参数名称并赋予适当的值,也可以通过提供在CREATE PROCEDURE语句中给定的参数值(不指定参数名称)来向存储过程传递值。在存储过程PRO_Student_IN中命名4个参数,其定义顺序为@Chinese、@English、@maths和@class。例如,将值传递给存储过程指定的参数名称。EXEC PRO_Student_IN @class="三年⼀班",@Chinese=85,@maths=85,@English=85例如,按照参数的位置传递,⽽不命名参数名称。EXEC PRO_Student_IN 85,85,85,"三年⼀班"1.不带默认值的参数创建⼀个参数不带默认值的存储过程,在调⽤该存储过程时,必须对存储过程中的所有参数进⾏赋值,如果有⼀个参数没有赋值,则⽆法调⽤该存储过程。下⾯创建⼀个不带参数默认值的存储过程,并通过指定参数的赋值,查询“MR_Student”表中指定班级的学⽣信息。运⾏结果如图1所⽰。图1 创建带参数的存储过程操作步骤如下:(1)在操作系统的任务栏中单击“开始”菜单,选择“程序”→“Microsoft SQL Server”→“查询分析器”命令,打开查询分析器。(2)SQL语句如下:USE MR_SQ --打开创建存储过程的数据库GO--创建存储过程CREATE PROCEDURE PRO_Student_IN@Chinese int, --定义参数@English int,@maths int,@class varchar(20)ASSelect *from MR_Studentwhere 语⽂>@Chinese and 英语>@English and 数学>@maths and 班级=@classGO执⾏PRO_Student_IN存储过程有两种⽅法。(1)按存储过程中参数的顺序对参数进⾏赋值。EXEC PRO_Student_IN 65,77,70,"三年⼀班"(2)执⾏存储过程时,可以按任意顺序对参数进⾏赋值。EXEC PRO_Student_IN @class="三年⼀班",@Chinese=65,@maths=70,@English=772.带默认值的参数在执⾏存储过程PRO_Student_IN时,如果缺省任何⼀个参数,将会产⽣错误,解决这种问题的⽅法是建⽴使⽤默认值的参数。只要在参数的定义之后加上等号,并在等号后⾯写出默认值。例如,给参数设置默认值。@Str varchar(20)='长春',@Int Int=10,@Char char(8)='0001',@float float=12.3本⽰例利⽤存储过程中的默认参数对数据表“MR_Student”进⾏查询。运⾏结果如图2所⽰。

图2 创建带参数默认值的存储过程操作步骤如下:(1)在操作系统的任务栏中单击“开始”菜单,选择“程序”→“Microsoft SQL Server”→“查询分析器”命令,打开查询分析器。(2)SQL语句如下:--创建存储过程USE MR_SQLGOCREATE PROCEDURE PRO_Student_NULL@Chinese int=60, --对参数设置默值@English int=60,@maths int=60,@class varchar(20)='三年⼆班'(责任编辑:admin)ASSelect *from MR_Studentwhere 语⽂>@Chinese and 英语>@English and 数学>@maths and 班级=@classGO执⾏存储过程,查询三年⼆班成绩全部及格并且数学成绩⼤于80的学⽣信息。EXEC PRO_Student_NULL @maths=80也可以⽤以下SQL语句调⽤PRO_Student_NULL存储过程:例如,查询三年⼆班成绩全部及格并且语⽂成绩⼤于70的学⽣信息。EXEC PRO_Student_NULL 70例如,查询三年⼆班成绩全部及格的学⽣信息。EXEC PRO_Student_NULL3.带返回参数的存储过程在创建存储过程时,可以⽤OUTPOT参数来创建⼀个带返回值的存储过程,例如:@int int OUTPUT@char char(10) OUTPUT@float float OUTPUT其中text、image等⼤于⼆进制数据类型的参数不能作为OUTPUT参数,在调⽤存储过程时,不必为返回参数赋值。本⽰例利⽤存储过程中的OUTPUT参数,在调⽤存储过程后利⽤返回值来判断查询的结果。运⾏结果如图3所⽰。图3 创建带返回参数的存储过程操作步骤如下:(1)在操作系统的任务栏中单击“开始”菜单,选择“程序”→“Microsoft SQL Server”→“查询分析器”命令,打开查询分析器。(2)SQL语句如下:--创建带返回值的存储过程CREATE PROCEDURE PRO_OUP@class char(10),@ave int OUTPUT --设置带返回值的参数ASselect @ave =avg(数学) from MR_Student where 班级=@classGO--执⾏存储过程DECLARE @average int --⾃定义变量DECLARE @subject char(10)SET @subject='三年⼀班' --对变量进⾏赋值EXEC PRO_OUP @subject,@average output --调⽤存储过程if @average>=85 --利⽤存储过程的返回值进⾏判断PRINT rtrim(@subject)+'数学的平均成绩为⾼等⽔平'if @average>=70PRINT rtrim(@subject)+'数学的平均成绩为中等⽔平'if @average<70PRINT rtrim(@subject)+'数学的平均成绩为⼀般⽔平'运⾏结果:三年⼀班数学的平均成绩为79,属于中等⽔平(责任编辑:admin)

摘要 存储过程的调⽤在B/S系统中⽤的很多。传统的调⽤⽅法不仅速度慢,⽽且代码会随着存储过程的增多不断膨胀,难以维护。新的⽅法在⼀定程度上解决了这些问题。  关键词 ;存储过程 

  在使⽤.NET的过程中,数据库访问是⼀个很重要的部分,特别是在B/S系统的构建过程中,数据库操作⼏乎成为了⼀个必不可少的操作。调⽤存储过程实现数据库操作使很多程序员使⽤的⽅法,⽽且⼤多数的程序员都是能使⽤存储过程就使⽤存储过程,很少直接使⽤SQL语句,所以存储过程是很有⽤⽽且很重要的。  存储过程简介  简单的说,存储过程是由⼀些SQL语句和控制语句组成的被封装起来的过程,它驻留在数据库中,可以被客户应⽤程序调⽤,也可以从另⼀个过程或触发器调⽤。它的参数可以被传递和返回。与应⽤程序中的函数过程类似,存储过程可以通过名字来调⽤,⽽且它们同样有输⼊参数和输出参数。  根据返回值类型的不同,我们可以将存储过程分为三类:返回记录集的存储过程, 返回数值的存储过程(也可以称为标量存储过程),以及⾏为存储过程。顾名思义,返回记录集的存储过程的执⾏结果是⼀个记录集,典型的例⼦是从数据库中检索出符合某⼀个或⼏个条件的记录;返回数值的存储过程执⾏完以后返回⼀个值,例如在数据库中执⾏⼀个有返回值的函数或命令;最后,⾏为存储过程仅仅是⽤来实现数据库的某个功能,⽽没有返回值,例如在数据库中的更新和删除操作。  使⽤存储过程的好处  相对于直接使⽤SQL语句,在应⽤程序中直接调⽤存储过程有以下好处:  (1)减少⽹络通信量。调⽤⼀个⾏数不多的存储过程与直接调⽤SQL语句的⽹络通信量可能不会有很⼤的差别,可是如果存储过程包含上百⾏SQL语句,那么其性能绝对⽐⼀条⼀条的调⽤SQL语句要⾼得多。  (2)执⾏速度更快。有两个原因:⾸先,在存储过程创建的时候,数据库已经对其进⾏了⼀次解析和优化。其次,存储过程⼀旦执⾏,在内存中就会保留⼀份这个存储过程,这样下次再执⾏同样的存储过程时,可以从内存中直接调⽤。  (3)更强的适应性:由于存储过程对数据库的访问是通过存储过程来进⾏的,因此数据库开发⼈员可以在不改动存储过程接⼝的情况下对数据库进⾏任何改动,⽽这些改动不会对应⽤程序造成影响。  (4) 布式⼯作:应⽤程序和数据库的编码⼯作可以分别独⽴进⾏,⽽不会相互压制。  由以上的分析可以看到,在应⽤程序中使⽤存储过程是很有必要的。  两种不同的存储过程调⽤⽅法  为了突出新⽅法的优点,⾸先介绍⼀下在.NET中调⽤存储过程的“官⽅”⽅法。另外,本⽂的所有⽰例程序均⼯作于SqlServer数据库上,其它情况类似,以后不再⼀⼀说明。本⽂所有例⼦均采⽤C#语⾔。  要在应⽤程序中访问数据库,⼀般性的步骤是:⾸先声明⼀个数据库连接SqlConnection,然后声明⼀个数据库命令SqlCommand,⽤来执⾏SQL语句和存储过程。有了这两个对象后,就可以根据⾃⼰的需要采⽤不同的执⾏⽅式达到⽬的。需要补充的是,不要忘记在页⾯上添加如下的引⽤语句:using ent。  就执⾏存储过程来说,如果执⾏的是第⼀类存储过程,那么就要⽤⼀个DataAdapter将结果填充到⼀个DataSet中,然后就可以使⽤数据⽹格控件将结果呈现在页⾯上了;如果执⾏的是第⼆和第三种存储过程,则不需要此过程,只需要根据特定的返回判定操作是否成功完成即可。  (1)执⾏⼀个没有参数的存储过程的代码如下:SqlConnection conn=new SqlConnection(“connectionString”);SqlDataAdapter da = new SqlDataAdapter();Command = new SqlCommand();tion = conn;dText = "NameOfProcedure";dType = Procedure;  然后只要选择适当的⽅式执⾏此处过程,⽤于不同的⽬的即可。  (2)执⾏⼀个有参数的存储过程的代码如下(我们可以将调⽤存储过程的函数声明为ExeProcedure(string inputdate)):SqlConnection conn=new SqlConnection(“connectionString”);SqlDataAdapter da = new SqlDataAdapter();Command = new SqlCommand();tion = conn;dText = "NameOfProcedure";dType = Procedure;(以上代码相同,以下为要添加的代码)param = new SqlParameter("@ParameterName", me);ion = ; = Time(inputdate);(param);  这样就添加了⼀个输⼊参数。若需要添加输出参数:param = new SqlParameter("@ParameterName", me);ion = ; = Time(inputdate);(param);  若要获得参储过程的返回值:param = new SqlParameter("@ParameterName", me);ion = Value; = Time(inputdate);(param);  从上⾯的代码我们可以看出,当存储过程⽐较多或者存储过程的参数⽐较多时,这种⽅法会⼤⼤影响开发的速度;另外⼀⽅⾯,如果项⽬⽐较⼤,那么这些⽤于数据库逻辑的函数在以后的维护中也是⼀个很⼤的负担。那么,有没有⼀种改进的⽅法可以解决这个问题呢?想到在执⾏没有参数的存储过程时只需要传⼊⼀个存储过程的名字就可以调⽤相应的存储过程,⽽且在SqlServer数据库中我们可以直接在查询分析器中敲⼊“存储过程名(参数列表)”样的字符串就可以执⾏存储过程,那么,是否可以把这种思想应⽤到应⽤程序中呢?  于是在编译器中键⼊相应代码。这些代码是在调⽤不带参数的存储过程的代码的基础上改的。具体代码如下:SqlConnection conn=new SqlConnection(“connectionString”);SqlDataAdapter da = new SqlDataAdapter();Command = new SqlCommand();tion = conn;dText = "NameOfProcedure(’para1’,’para2’,para3)";dType = Procedure;  为了使代码更具有代表性,要调⽤的存储过程的第⼀个和第⼆个参数都为字符串类型,第三个参数为整型。执⾏以后发现,完全可以达到预期的效果!SqlConnection conn=new SqlConnection("server=.;uid=sa;pwd=sa;database=yourdatabase")

SqlCommand cmd=new SqlCommand("libsearch",conn);

dType = Procedure;//指⽰libsearch为存储过程

("@name",,20);

ters["@name"].Value=传⼊name的值

("@member_no",,4);

ters["@member_no"].Value=传⼊member_no的值

("@loancount",,4);

ters["@loancount"].Direction=;NonQuery();//执⾏存储过程

string loancount=ters["@loancount"].ng()

//得到值.