一、首先必须在数据库中创建存储过程。
以SQLServer2005为例,使用的数据库是SQLServer2005提供的可选择安装的示例数据库AdventureWorks,欲知如何安装可以参阅SQLServer 2005联机帮助主题“运行安装程序安装AdventureWorks示例数据库和示例”。
下面创建一个名为prd_ShoppingCartItem的存储过程。
Code
create procedure prd_ShoppingCartItem
(@ShoppingCartID nvarchar(50),@Quantity int = 1,@ProductID int)
AS
if Exists(Select * from Sales.ShoppingCartItem where ShoppingCartID = @ShoppingCartID and ProductID = @ProductID )
begin
update Sales.ShoppingCartItem set Quantity = @Quantity where ShoppingCartID = @ShoppingCartID and ProductID = @ProductID
end
else
begin
insert into Sales.ShoppingCartItem (ShoppingCartID,Quantity,ProductID)
values(@ShoppingCartID,@Quantity,@ProductID)
end
go 二、在.NET应用程序中调用这个存储过程
Code
string source = "server=RSB_022\\ARYANG; integrated security=SSPI; database=AdventureWorks";
using (SqlConnection conn = new SqlConnection(source))
{
conn.Open();
SqlCommand cmd = new SqlCommand("prd_ShoppingCartItem", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@ShoppingCartID", SqlDbType.NVarChar, 50, "ShoppingCartID");
cmd.Parameters.Add("@Quantity",SqlDbType.Int,4,"Quantity");
cmd.Parameters.Add("@ProductID",SqlDbType.Int,4,"ProductID");
cmd.Parameters[0].Value = "20622";
cmd.Parameters[1].Value = 7;
cmd.Parameters[2].Value = 874;
cmd.ExecuteNonQuery();
} 三、使用存储过程的好处
(1)把SQL嵌入到应用程序内在应用环境下不易修改,并且修改后还需要重新编译程序,给部署带来很大的麻烦。如果把T-SQL集中到存储过程中去,只要不改变存储过程的名称,就能快速方便地对SQL进行修改。
(2)存储过程可以帮助密集的查询减少网络流量,因为应用程序调用的只是存储过程而不是数十行设置上百行的SQL语句。
(3)存储过程有利于代码的复用性。定义的一个存储过程可以在应用程序的多个地方调用。
(4)存储过程对查询的相应更加稳定。
(5)存储过程使您的系统更加安全。如,嵌入到应用程序的SQL比较容易收到SQL注入攻击,并且容易向人暴露数据库的基础架构信息。