第七课 使用存储过程(翻译)

来源:互联网 发布:软件项目经理职责 编辑:程序博客网 时间:2024/05/29 03:20

本文档由李欣蔚(nirvana_li)翻译自http://www.csharp-station.com/,转载请注名出处!
更新日期2006-2-14

Lesson 07: Using Stored Procedures

7课,使用存储过程

这节课展示了在数据存取代码中如何使用存储过程。以下是本节课的目标:

  • 学习如何通过使用存储过程修改SqlCommand对象
  • 学习如何使用带参数的存储过程

介绍

一个存储过程是一个存储在数据库中的预先定义号的,可重用的程序。SQL Server编译存储过程,它使其更有效的使用。因此,作为动态的在代码中创建查询的替代,你能够得到存储过程的重用和性能优势。下面的章节将告诉你如何修改SqlCommand对象来使用存储过程。另外,你将看到为什么参数支持是ADO.NET库中一个另外重要部分的原因

执行存储过程

除了使用字符串创建命令,SqlCommand类型能够被存储过程所使用.在这里需要有两件事情发生:SqlCommand对象知道哪一个存储过程执行,并告诉SqlCommand对象它执行的是存储过程.下面是说明了这两个步骤:

        // 1.  create a command object identifying

        //     the stored procedure

        SqlCommand cmd  = new SqlCommand(

               "Ten Most Expensive Products", conn);

 

        // 2. set the command object so it knows

        //    to execute a stored procedure

        cmd.CommandType = CommandType.StoredProcedure;

在上面声明SqlCommand对象声明时,第一个参数设置为”Ten Most Expensive Products”.这是在Northwind数据库中的存储过程的名字.第二个参数是连接对象,它和用来执行查询字符串的SqlCommand构造函数一样.


第二个命令通过设置CommandType属性为CommandType枚举中的存储过程的值的方式告诉SqlCommand对象它将执行何种命令.SqlCommand构造函数中的第一个参数被默认地作为查询字符串解析(而不是将它解释为命令字符串)。其它的代码能够像前面课程中一样使用SqlCommand对象。


向存储过程传递参数

 

对存储过程使用的参数与对command使用的查询字符串相同。如下代码所示:

        // 1.  create a command object identifying

        //     the stored procedure

        SqlCommand cmd  = new SqlCommand(

               "CustOrderHist", conn);

 

        // 2. set the command object so it knows

        //    to execute a stored procedure

        cmd.CommandType = CommandType.StoredProcedure;

 

        // 3. add parameter to command, which

        //    will be passed to the stored procedure

        cmd.Parameters.Add(

               new SqlParameter("@CustomerID", custId));


上面的SqlCommand构造函数指明了存储过程的名字为CustOrderHist作为它的第一个参数。这个特殊的存储过程使用一个单独的参数,名为@CustomerID.因此,必须使用SqlParameter对象增加此参数。作为第一个参数传递给SqlParameter构造函数的参数名字必须与存储过程参数名字一致。然后与你执行任何其它SqlCommand对象一样执行命令。


一个完整的示例


 

Listing1中的代码包括完整能运行的如何使用存储过程的示例。对于有参数的存储过程和没有参数的存储过程分别有不同的方法。

Listing 1: Executing Stored Procedures

using System;

using System.Data;

using System.Data.SqlClient;

 

class StoredProcDemo

{

        
static void Main()

        
{

               StoredProcDemo spd 
= new StoredProcDemo();

 

               
// run a simple stored procedure

               spd.RunStoredProc();

 

               
// run a stored procedure that takes a parameter

               spd.RunStoredProcParams();

        }


 

        
// run a simple stored procedure

        
public void RunStoredProc()

        
{

               SqlConnection conn 
= null;

               SqlDataReader rdr  
= null;

 

               Console.WriteLine(
" Top 10 Most Expensive Products: ");

 

               
try

               
{

                       
// create and open a connection object

                       conn 
= new

                               SqlConnection(
"Server=(local);DataBase=Northwind;Integrated Security=SSPI");

                       conn.Open();

 

                       
// 1.  create a command object identifying

                       
//     the stored procedure

                       SqlCommand cmd  
= new SqlCommand(

                               
"Ten Most Expensive Products", conn);

 

                       
// 2. set the command object so it knows

                       
//    to execute a stored procedure

                       cmd.CommandType 
= CommandType.StoredProcedure;

 

                       
// execute the command

                       rdr 
= cmd.ExecuteReader();

 

                       
// iterate through results, printing each to console

                       
while (rdr.Read())

                       
{

                               Console.WriteLine(

                                      
"Product: {0,-25} Price: ${1,6:####.00}",

                                      rdr[
"TenMostExpensiveProducts"],

                                      rdr[
"UnitPrice"]);

                       }


               }


               
finally

               
{

                       
if (conn != null)

                       
{

                               conn.Close();

                       }


                       
if (rdr != null)

                       
{

                               rdr.Close();

                       }


               }


        }


 

        
// run a stored procedure that takes a parameter

        
public void RunStoredProcParams()

        
{

               SqlConnection conn 
= null;

               SqlDataReader rdr  
= null;

 

               
// typically obtained from user

               
// input, but we take a short cut

               
string custId = "FURIB";

 

               Console.WriteLine(
" Customer Order History: ");

 

               
try

               
{

                       
// create and open a connection object

                       conn 
= new

                               SqlConnection(
"Server=(local);DataBase=Northwind;Integrated Security=SSPI");

                       conn.Open();

 

                       
// 1.  create a command object identifying

                       
//     the stored procedure

                       SqlCommand cmd  
= new SqlCommand(

                               
"CustOrderHist", conn);

 

                       
// 2. set the command object so it knows

                       
//    to execute a stored procedure

                       cmd.CommandType 
= CommandType.StoredProcedure;

 

                       
// 3. add parameter to command, which

                       
//    will be passed to the stored procedure

                       cmd.Parameters.Add(

                               
new SqlParameter("@CustomerID", custId));

 

                       
// execute the command

                       rdr 
= cmd.ExecuteReader();

 

                       
// iterate through results, printing each to console

                       
while (rdr.Read())

                       
{

                               Console.WriteLine(

                                      
"Product: {0,-35} Total: {1,2}",

                                      rdr[
"ProductName"],

                                      rdr[
"Total"]);

                       }


               }


               
finally

               
{

                       
if (conn != null)

                       
{

                               conn.Close();

                       }


                       
if (rdr != null)

                       
{

                               rdr.Close();

                       }


               }
      

        }


}


Listing 1中的RunStoredProc方法简单地运行存储过程并打印结果到控制台。在RunStoredProcParams方法中,存储过程使用单一参数。它说明使用查询字符串和存储过程没有两样。其它的代码应该和本指南前面章节的差不多。

Summary


为了执行存储过程,在SqlCommand构造函数的第一个参数中指定存储过程的名字,然后将SqlCommandCommandType设置为StoredProcedure

同样能够使用SqlParameter对象将参数传递给存储过程,它与使用SqlCommand对象执行查询字符串一样。一旦SqlCommand对象被构造,你就能像使用前面课程中的SqlCommand对象一样使用它。


 

原创粉丝点击