C#数据库入门-006:使用存储过程

本文介绍了SQL存储过程的基础概念及其优势,并详细演示了如何创建、修改、显示定义、使用及删除存储过程。通过具体实例,展示了不同类型的存储过程,包括无参数、带参数以及带有输出参数的存储过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:介绍
    存储过程运行重复执行某个任务SQL语句。只要创建某个过程一次,就可以在程序中多次重用它。这就提供了程序的可维护性,允许程序以统一优化的方式访问数据库。
    1: 优点
        存储过程可以有用于输入或输出的参数。
        可以返回一个整数集(默认为0),也可以返回一个或多个结果集。
        可以在客户程序或其他存储过程中调用,功能强大,是数据库编程的首选模式,尤其适用于多层程序和WEB服务,源于它可以显著降低客户和数据库服务器之间的网络通讯量。

二:创建存储过程
    1: CREATE PROCEDURE sp_select_all_employees
        AS  //AS关键字把存储过程的签名与存储过程体分隔开来
         SELECT employeeid, firstname, lastname
         FROM employees;

        EXECUTE sp_select_all_employees;


    2: 创建带参数的存储过程
        CREATE PROCEDURE sp_orders_by_employeeid
         @employeeid int //默认是输入参数
        AS
         SELECT orderid, customerid
         FROM orders
         WHERE employeeid = @employeeid;

        EXECUTE sp_orders_by_employeeid 2;
    3: 带输出的存储过程
        CREATE PROCEDURE sp_orders_by_employeeid2
         @employeeid int,
         @ordercount int = 0 output//输出需要加标识
        AS
         SELECT orderid, customerid
         FROM orders
         WHERE employeeid = @employeeid;
         SELECT @ordercount = count(*)   //将新查询返回的标量赋给SELECT列表中的输出参数
         FROM orders
         WHERE employeeid = @employeeid;
         RETURN @ordercount;

        DECLARE @return_value int, @ordercount int;
        EXECUTE @return_value = sp_orders_by_employeeid2
          @employeeid = 2,
          @ordercount = @ordercount output;
        SELECT @ordercount as '@ordercount';
        SELECT 'Return value' = @return_value;

三:修改存储过程
    ALTER PROCEDURE sp_select_all_employees
    AS 
        SELECT employeeid, firstname, lastname
        FROM employees
     ORDER BY lastname, firstname;

    EXECUTE sp_select_all_employees;

四:显示存储过程的定义
    SP_HELPTEXT语句对表对象不起作用。
    EXECUTE SP_HELPTEXT 'sp_select_all_employees';
    查询->将结果保存到->将结果保存到文件(CTRL+SHIFT+F)
    Text
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    CREATE PROCEDURE sp_select_all_employees
    AS 
        SELECT employeeid, firstname, lastname
        FROM employees
     ORDER BY lastname, firstname;

五:在C#中使用存储过程
    static void Main(string[] args)
    {
        SqlConnection conn = new SqlConnection(@"server=./sqlexpress; integrated security=true; database=northwind");
        try
        {
            conn.Open();
            SqlCommand cmd = conn.CreateCommand();
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "sp_orders_by_employeeid2";

            SqlParameter inparm = cmd.Parameters.Add("@employeeid", SqlDbType.Int);
            inparm.Direction = ParameterDirection.Input;
            inparm.Value = 2;

            SqlParameter outparm = cmd.Parameters.Add("@ordercount", SqlDbType.Int);
            outparm.Direction = ParameterDirection.Output;

            SqlParameter retval = cmd.Parameters.Add("@return_value", SqlDbType.Int);
            retval.Direction = ParameterDirection.ReturnValue;

            SqlDataReader rdr = cmd.ExecuteReader();

            while (rdr.Read())
            {
                Console.WriteLine("{0},{1}", rdr[0].ToString().PadRight(5), rdr[1].ToString());
            }
            rdr.Close();

            Console.WriteLine("the output parameter value is {0}", cmd.Parameters["@ordercount"].Value);

            Console.WriteLine("the return value is {0}", cmd.Parameters["@return_value"].Value);


        }
        catch (SqlException ex)
        {
            Console.WriteLine(ex.ToString());
        }
        finally
        {
            conn.Close();
        }
    }

六:删除存储过程
    DROP PROCEDURE sp_select_all_employees;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值