9.5 使用存储过程

  存储过程在开发过程中经常被使用,因为存储过程能够将数据操作和程序操作在代码上分离,而且存储过程相对于SQL语句而言,具有更好的性能和安全性,使用存储过程能够提高应用程序的性能和安全性。

9.5.1 存储过程的优点
  在数据库操作中,已经有了SQL语句,为何还需要存储过程。因为存储过程有SQL语句不能具备的特点和优点,以至于存储过程能在严格的数据库驱动的应用程序中起到重要的作用。存储和过程有点包括:
1)事务处理。
2)速度和性能。
3)过程控制。
4)安全性。
5)减少网络流量和通信。
6)模块化。
1.事务处理
  存储过程中,包括多个SQL语句,存储过程中的SQL语句属于事务处理的范畴。也就是说,存储过程类似于一个函数,当执行存储过程时,存储过程中的SQL语句要不都执行,要不都不执行。
2.速度和性能
  存储过程由数据库服务器编译和优化,优化包括使用存储过程在运行时所必须的特定数据库的结构信息,这样在执行过程中会节约很多时间。存储过程完全在数据库服务器上执行,避免了大量的SQL语句代码的传递,对于循环使用SQL语句而言,存储过程在速度和性能上都被优化。
3.过程控制
  在编写存储过程中,可以使用IF ELSE、FOR以及WHILE循环,这些语句并不能在SQL语句中编写,但是可以在存储过程中编写。当需要进行大量的和复杂的操作时,SQL语句需要通过和编程语言一同编写才能实现,而且实现复杂。相比之下,存储过程可以对过程进行控制。
4.安全性
  存储过程也可以作为额外的安全层。开发人员或者用户,都只能对数据库中的存储过程进行使用,而无法直接对表进行数据操作,这样封装了数据操作,提高安全性。
5.减少网络流量和通信
  存储过程是在数据库服务器上运行的,在使用存储过程中,无需将大量的SQL语句代码传递给数据库服务器,而只需告诉数据库服务器执行哪个存储过程即可,而数据库服务器则会自行执行中间处理操作,而不会通过网络传递不必要的数据。
6.模块化
  正如代码编写规范和设计模式一样,通常情况下,开发团队或者公司需要严谨的代码编写风格和良好的协调能力,例如一个团队有人专门负责编码,有人专门负责数据库开发,那么可以让数据库开发人员负责数据库的开发,而编码的程序员只需要使用数据库开发人员设计的存储过程即可。在这种情况下,数据库操作和应用程序编码的操作被分开,在维护、管理中,也非常方便,如果数据库存储过程的代码出现问题,则只需要修改存储过程中的代码即可。

9.5.2 创建存储过程
  存储过程可以通过SQL Server Management Studio创建,也可以使用.NET框架通过编程实现.SQL Server Management Studio创建存储过程比较方便,右击【对象资源管理器】中的相应的数据库,在下拉菜单中选择【可编程性】选项并选择【存储过程】选项。单击右键,选择【新建存储过程】选项,系统会自动创建一个新的标签(tab)窗口,以提供输入存储过程语句,如图9-3所示。
使用Server Management Studio创建存储过程
图9-3 使用Server Management Studio创建存储过程
  在tab窗口中输入存储过程,代码如下所示。
+展开
-SQL
    CREATE PROC myproc
    (
    @id int,
    @title varchar(50) OUTPUT
    )
    AS
    SET NOCOUNT ON
    DECLARE @newscount int
    SELECT @title=mynews.title,@newscount=COUNT(mynews.id)
    FROM mynews
    WHERE (id=@id)
    GROUP BY mynews.title
    RETURN @newscount

  上述存储过程返回了数据库中新闻的标题内容。“@id”表示新闻的id,@title表示新闻的标题,此存储过程将返回“@title”的值,并且返回新闻的总数。在C#中同样可以使用编程实现存储过程的创建,示例代码如下所示。
+展开
-C#
                string str = "CREATE PROC myproc" +
                "(" +
                "@id int," +
                "@title varchar(50) OUTPUT" +
                ")" +
                "AS" +
                "SET NOCOUNT ON" +
                "DECLARE @newscount int" +
                "SELECT @title=mynews.title,@newscount=COUNT(mynews.id)" +
                "FROM mynews" +
                "WHERE (id=@id)" +
                "GROUP BY mynews.title" +
                "RETURN @newscount";
                SqlCommand cmd = new SqlCommand(str, con);
                cmd.ExecuteNonQuery();//使用cmd的ExecuteNonQuery方法创建存储过程

  上述代码通过使用SqlCommand对象的ExecuteNonQuery()方法在数据库中创建了一个存储过程,该存储过程用于返回了数据库中新闻的标题内容。

9.5.3 调用存储过程
  创建存储过程之后,可以在.NET应用程序中使用存储过程。存储过程可以看成是一个函数,可以对存储过程进行调用,传递参数,接受返回值。在调用存储过程前,首先要与数据库建立连接,示例代码如如下所示。
+展开
-C#
                string str = "server='(local)';database='mytable';uid='sa';pwd='Sa'";
                SqlConnection con = new SqlConnection(str);
                con.Open();//打开连接

  建立与数据库连接后,需要使用Command对象使用存储过程,Command对象接受的两个参数分别为SQL语句和Connection对象,在使用存储过程时,其中表示SQL语句的参数可以直接编写为存储过程名,代码如下所示。
+展开
-C#
                SqlCommand cmd = new SqlCommand("getdetail", con);//使用存储过程

  默认情况下,Command对象的类型是SQL语句,必须将Command对象的CommandType属性设置为存储过程,系统才会调用存储过程,示例代码如下所示。
+展开
-C#
                cmd.CommandType = CommandType.StoredProcedure;//设置Command对象的类型

  设置执行类型后,需要为存储过程增加参数,示例代码如下所示。
+展开
-C#
                SqlParameter spr; //表示执行一个存储过程
                spr = cmd.Parameters.Add("@id", SqlDbType.Int);//增加参数id
                spr = cmd.Parameters.Add("@title", SqlDbType.NChar,50); //增加参数title
                spr.Direction = ParameterDirection.Output;//该参数是输出参数
                spr = cmd.Parameters.Add("@count", SqlDbType.Int);//增加count参数
                spr.Direction = ParameterDirection.ReturnValue;//该参数是返回值
                cmd.Parameters["@id"].Value = 1;//为参数初始化
                cmd.Parameters["@title"].Value = null;//为参数初始化

  参数设置完毕后,执行ExecuteNonQuery方法能够执行存储过程,就相当于开始调用函数,示例代码如下所示。
+展开
-C#
                cmd.ExecuteNonQuery();//执行存储过程

  当存储过程执行完毕后,能够获取参数和返回值,示例代码如下所示。
+展开
-C#
                Label1.Text = cmd.Parameters["@count"].Value.ToString();//获取返回值

  使用SQL Server Management Studio同样能够执行存储过程,单击存储过程,单击右键,选择执行存储过程,系统会提示输入参数,如图9-4所示。输入相应的参数,单击确定,系统会执行存储过程并返回相应的值,如图9-5所示。
为存储过程传递参数
图9-4 为存储过程传递参数
执行完成
图9-5 执行完成
  使用SQL Server Management Studio能够快速的创建和使用存储过程,同样,能够通过编程的方法实现存储过程的创建、参数的传递以及执行。存储过程的优点就在于速度比较快,能够控制过程、减少网络通信和模块化,熟练的使用存储过程能够提高应用程序的性能和复用性。

加支付宝好友偷能量挖...


评论(0)网络
阅读(121)喜欢(0)Asp.Net/C#/WCF