我昨天写了一个存储过程
create procedure getcount
@count int output 
as
begin
select @count = count(*) from pwd
end
GO
程序里调用
        Dim i As Integer
        SqlConnection1.Open()
        SqlCommand1.CommandText = "getcount"
        SqlCommand1.Connection = SqlConnection1
        SqlCommand1.CommandType = CommandType.StoredProcedure
        SqlCommand1.Parameters.Add(New SqlClient.SqlParameter("@count", SqlDbType.Int))
        SqlCommand1.Parameters("@count").Direction = ParameterDirection.Output
        SqlCommand1.ExecuteNonQuery()
        i = SqlCommand1.Parameters("@count").Value
        SqlConnection1.Close()我的问题是,我怎么觉得存储过程还要麻烦一些?如果用SQL语句,一句话就可以了。那存储过程用在哪里呢?是不是像这种简单的表就用不到存储过程?那什么情况下,才用到存储过程呢?

解决方案 »

  1.   

    1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL 语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
    2.当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete 时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
    3.存储过程可以重复使用,可减少数据库开发人员的工作量
    4.安全性高,可设定只有某此用户才具有对指定存储过程的使用权相对于直接使用SQL 语句,在应用程序中直接调用存储过程有以下好处:
    (1)减少网络通信量。
    调用一个行数不多的存储过程与直接调用SQL 语句的网络通信量可能不会有很大的差别,可是如果存储过程包含上百行SQL 语句,那么其性能绝对比一条一条的调用SQL 语句要高得多。
    (2)执行速度更快。
    有两个原因:首先,在存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行,在内存中就会保留一份这个存储过程,这样下次再执行同样的存储过程时,可以从内存中直接调用。(3)更强的适应性.由于存储过程对数据库的访问是通过存储过程来进行的,因此数据库开发人员可以在不改动存储过程接口的情况下对数据库进行任何改动,而这些改动不会对应用程序造成影响。
    (4) 分布式工作.
    应用程序和数据库的编码工作可以分别独立进行,而不会相互压制。本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2009/07/31/4397836.aspx
      

  2.   

    1\在SQL 语句不能解决或用起来比存复杂时 
    2\只服务器端处理数据时 
    3\sql语句比较长,而且不用参数时