`
wsql
  • 浏览: 11758042 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

存储过程使用

 
阅读更多

谓存储过程就是Transact-SQL语句的预编译集合,这些语句在一个名称下存储并作为一个单元进行处理。由于存储过程被预先编译过,所以执行起来要比单行SQL语句效率高出很多,在应用程序开发过程中应尽可能的采用存储过程进行数据的增加、更新、删除和查询操作,以提升应用程序的整体运行效率。

执行SQL Server的存储过程需要如下步骤:

1、生成SqlCommand对象并将其CommandText属性设置为存储过程的名称或包含过程调用的 EXECUTE语句。

2、增加过程调用所需要的参数到SqlCommand对象中,记住将任何输出参数的Direction属性设置为ParameterDirection.Output,代码如下:

comm.Parameters["@msg"].Direction=ParameterDirection.Output;

这些输出参数可以在存储过程调用中用T-SQL OUTPUT关键字定义,也可以在实际过程中用RETURN语句返回。如果用RETURN语句返回执行结果,需要给SqlCommand对象的Parameters列表,添加如下代码:

comm.Parameters.Add("RETURN_VALUE",SqlDbType.Int);

并将Direction属性设置为ParameterDirection.ReturnValue,代码如下:

comm.Parameters["RETURN_VALUE"].Direction=ParameterDirection.ReturnValue;

3、用ExecuteNonQuery()方法执行SqlCommand对象。

4、读取任何输出参数的值。

执行只有返回值的存储过程

1、后台建立存储过程

create proc selectserverdate

@date varchar(14) OUTput,@datetime datetime output

AS

SET @date=DATENAME(yy,GETDATE())+‘年’+ DATENAME(mm,GETDATE())+‘月’

+ DATENAME(dd,GETDATE()) +'日'

SET @datetime=getdate()

2、前台调用执行存储过程

SqlCommand cmd=new SqlCommand(“selectserverdate”,con);//建立SqlCommand对象

cmd.CommandType=CommandType.StoredProcedure;//设置SqlCommand对象执行类型为存储过程

cmd.Parameters.Add(“@date”,SqlDbType.VarChar,14);//向Parameters参数列表添加参数

cmd.Parameters.Add("@datetime",SqlDbType.DateTime,8);

cmd.Parameters[“@date”].Direction=ParameterDirection.Output;//设置参数的输出类型

cmd.Parameters["@datetime"].Direction=ParameterDirection.Output;

cmd.ExecuteNonQuery();//执行存储过程

Session[“date”]=cmd.Parameters[“@date”].Value;//获取存储过程的返回值

Session["datetime"]=cmd.Parameters["@datetime"].Value;

DateTime weekday=new DateTime();

weekday=Convert.ToDateTime(cmd.Parameters["@datetime"].Value);

string date=weekday.DayOfWeek.ToString();

执行带输入参数、输出参数和返回值的存储过程

1、后台建立存储过程

create proc IUD_dept(@zxcs AS VARCHAR(6),@dept AS varchar(10),

@ID AS uniqueidentifier,@msg varchar(16) output)

as

begin tran

BEGIN

if @zxcs='INSERT'

BEGIN

INSERT INTO dept(dept) VALUES(@dept)

END

if @zxcs='UPDATE'

BEGIN

DECLARE @OLD_DEPT VARCHAR(10)

SELECT @OLD_DEPT=dept FROM DEPT WHEREID=@ID

UPDATE VERIFY SETdept=@deptWHEREdept=@OLD_DEPT

UPDATE dept SETdept=@deptWHEREID=@ID

END

if @zxcs='DELETE'

BEGIN

DELETE FROM dept WHEREID=@ID

END

END

if @@error<>0

BEGIN

rollback tran

SET @msg='数据'+@zxcs+'失败?'

SELECT @msg--输出后在前台接收

RETURN 1

END

else

BEGIN

commit tran

SET @msg='数据'+@zxcs+'成功!'

SELECT @msg--输出后在前台接收

RETURN 0

END

2、前台调用执行存储过程

//设置增删改的存储过程所需要的参数

comm=new SqlCommand("IUD_dept",con); //建立SqlCommand对象

comm.CommandType=CommandType.StoredProcedure; //设置SqlCommand对象执行类型为存储过程

comm.Parameters.Add("@zxcs",SqlDbType.VarChar,6); //向Parameters参数列表添加参数

comm.Parameters.Add("@dept",SqlDbType.VarChar,10);

comm.Parameters.Add("@id",SqlDbType.UniqueIdentifier);

comm.Parameters.Add("@msg",SqlDbType.VarChar,16);

comm.Parameters.Add(“RETURN_VALUE”,SqlDbType.Int); //有RETURN返回值需要向参数列表添加

comm.Parameters["@msg"].Direction=ParameterDirection.Output; //设置参数的输出类型

comm.Parameters[“RETURN_VALUE”].Direction=ParameterDirection.ReturnValue;

comm.Parameters[“@zxcs”].Value=“INSERT”;//执行INSERT操作

comm.Parameters[“@dept”].Value=“信息组”;

comm.Parameters["@id"].Value=new Guid("6D739432-3EDD-458C-9C52-5C2EA74A5DD6“);

comm.ExecuteNonQuery();

Response.Write(comm.Parameters["@msg"].Value+“<br>“);

Response.Write(comm.Parameters["RETURN_VALUE"].Value +“<br>“);

if((Int32)comm.Parameters[“RETURN_VALUE”].Value==0)

{ 代码块 }

说明:SQL Server中的UniqueIdentifier数据类型在.NET中需要使用new Guid()类进行转换

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics