存储过程(Stored Procedure)
- 存储过程定义
- 存储过程如何使用
- 在SQL Server中创建存储过程
- 调用存储过程
- 删除存储过程
- C#中调用存储过程
- 为什么使用存储过程
存储过程定义
摘自百度百科
存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象。在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升。
可以简单理解为存储过程是封装好的一个完成特定功能函数,通过使用存储过程名来执行这个函数。
存储过程如何使用
在SQL Server中创建存储过程
找到数据库-表-可编译性-存储过程-右击新建存储过程。
create proc sp_name
@[参数名] [类型],@[参数名] [类型]
as
begin
.........
end
实例:
CREATE PROCEDURE news_update --存储过程名
--使用到的参数,
@id int,
@title varchar(100),
@content text,
@caid int
AS
BEGIN
--SQL语句
UPDATE news
SET title = @title, [content] = @content, caId = @caid
where id = @id
END
GO
调用存储过程
存储过程可以在三种环境下被调用:
command命令下,基本语法为:exec sp_name [参数名];
实例:
exec news_update @id=6,@title=abc,@content=def,@caid=13
SQL环境下,基本语法为:call sp_name [参数名];
PL/SQL环境下,基本语法为:begin sp_name [参数名] end;
删除存储过程
drop procedure sp_name
C#中调用存储过程
DAL层代码
SQLHelper类
/// <summary>
/// 指向带参数的SQL语句或存储过程
/// </summary>
/// <param name="cmdText">QL语句或存储过程</param>
/// <param name="paras">参数集合</param>
/// <param name="ct">命令类型</param>
/// <returns></returns>
public DataTable ExecuteQuery(string cmdText, SqlParameter[] paras, CommandType ct)
{
//初始化 System.Data.DataTable 类的新实例。
DataTable dt = new DataTable();
//使用查询的文本和 System.Data.SqlClient.SqlConnection 初始化 System.Data.SqlClient.SqlCommand
//类的新实例
cmd = new SqlCommand(cmdText, GetConn());
cmd.CommandType = ct;
//在Parameters末尾添加值数组
cmd.Parameters.AddRange(paras);
//using执行完时释放()中的内容,相应的数据库连接也会关闭
using (sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
//通过所提供的 System.Data.IDataReader,用某个数据源的值填充 System.Data.DataTable。 如果 System.Data.DataTable
// 已经包含行,则从数据源传入的数据与现有行合并。
dt.Load(sdr);
}
//返回查询结果
return dt;
}
News类
/// <summary>
/// 取出最新10条新闻(所属分类、新闻标题、发布时间)
/// </summary>
/// <returns></returns>
public DataTable SelectNewNews()
{
//procNews_SelectNewNews为存储过程名
return sqlhelper.ExecuteQuery("procNews_SelectNewNews", CommandType.StoredProcedure);
}
为什么使用存储过程
存储过程只在创造时进行编译,以后每次执行存储过程都不需重新编译;而一般SQL语句每执行一次就需要编译一次,所以使用存储过程可提高数据库执行速度;
当对数据库进行复杂操作时(如对多个表进行增删改查),可将这些复杂操作通过存储过程封装起来,避免程序中sql语句过长。