zoukankan      html  css  js  c++  java
  • 存储过程的使用

    存储过程的好处很多,降低网络的通信量是最吸引我的地方,现仅以C#中的使用方法进行介绍

    原始表结构如下:

    test

    id  int  4

    name  varchar  50

    cost  int  4

    1.向test表中插入一条记录,并以output方式返回当前的总花费;

    构建的存储过程如下:

    CREATE PROCEDURE [dbo].[proc_output]
    @param1 int,
    @param2 varchar,
    @param3 int,
    @param4 int
     AS
    insert into test values(@param1,@param2,@param3)
    select @param4=sum(cost) from test;
    GO

    C#中的使用方法如下:

    SqlConnection conn = new SqlConnection("server=LIPING\\LIPING;uid=sa;pwd=liping;database=test");
                conn.Open();
                SqlCommand MyCommand = new SqlCommand("proc_output", conn);
                MyCommand.CommandType = CommandType.StoredProcedure;
                MyCommand.Parameters.Add(new SqlParameter("@param1", SqlDbType.Int));   //添加一个输入参数
                MyCommand.Parameters["@param1"].Value =8;
                MyCommand.Parameters.Add(new SqlParameter("@param2", SqlDbType.VarChar));    //添加一个输入参数
                MyCommand.Parameters["@param2"].Value = "strawberry";
                MyCommand.Parameters.Add(new SqlParameter("@param3", SqlDbType.Int));     //添加一个输入参数
                MyCommand.Parameters["@param3"].Value = 60;
                MyCommand.Parameters.Add(new SqlParameter("@param4", SqlDbType.Int));     //添加一个输出参数
                MyCommand.Parameters["@c"].Direction = ParameterDirection.Output;
                MyCommand.ExecuteNonQuery();
                Console.WriteLine(mailto:%22存储过程通过Output返回值:MyCommand.Parameters[%22@param3%22].Value.ToString());
                conn.Close();
                MyCommand.Dispose();

    2.向test表中插入一条记录,并以return方式返回当前的总花费;

    构建的存储过程如下:

    CREATE PROCEDURE [dbo].[proc_return]
    @param1 int,
    @param2 varchar,
    @param3 int
     AS
    declare @i int
    insert into test values(@param1,@param2,@param3)
    select @i= sum(cost) from test;
    return @i
    GO

    C#中的使用方式与第一种情况类似,区别如下:

    MyCommand.Parameters.Add(new SqlParameter("@return_value", SqlDbType.Int));
                MyCommand.Parameters["@return_value"].Direction = ParameterDirection.ReturnValue;
                MyCommand.ExecuteNonQuery();
                Console.WriteLine("存储过程通过Return返回值:MyCommand.Parameters["@return_value"].Value.ToString());

    3.向表中插入一条记录,并得到记录集;

    构建的存储过程如下:

    CREATE PROCEDURE [dbo].[proc_recordset]
    @param1 int,
    @param2 varchar,
    @param3 int
     AS
    insert into test values(@param1,@param2,@param3)
    select * from test;
    GO

    C#中的使用中传入三个参数的方法与第一种情况一致,获取记录集方法如下:

    SqlDataAdapter da = new SqlDataAdapter(MyCommand);
                DataSet ds = new DataSet();
                da.Fill(ds);
                this.dataGridView1.DataSource = ds.Tables[0].DefaultView;

    4.批量添加记录

    存储过程如下:

    CREATE PROCEDURE dbo.proc_batch
        @arrValues varChar(800)
    AS
        DECLARE @prev int
        DECLARE @cur int
        DECLARE @TId char
        Set @prev=1
        set @cur=1
       
        begin transaction
        Set NoCount ON
       
        Set @cur=CharIndex(',',@arrValues,@prev+1)
        set @TId=cast(SUBSTRING(@arrValues,@prev,@cur-@prev) as  char)
        Insert into test (name) Values(@TId)
        SET @prev = @cur
        while (@prev+1 < LEN(@arrValues))
        Begin
            Set @cur=CharIndex(',',@arrValues,@prev+1)
            if(@cur>0)
            Begin
                set @TId=cast(SUBSTRING(@arrValues,@prev+1,@cur-@prev-1) as char)
                Insert into test (name) Values(@TId)
                SET @prev = @cur
            End
            else
                Break
        End
       
        set @TId=cast(SUBSTRING(@arrValues,@prev+1,LEN(@arrValues)-@prev) as char)
        Insert into test (name) Values(@TId)
        Set NoCount OFF
        if @@error=0
        begin
            commit transaction
        end
        else
        begin
            rollback transaction
        end
    GO

    C#中的使用方法与第一种情况一致。

  • 相关阅读:
    python-django-自定义分页
    self.user = serializer_field.context['request'].user KeyError: 'request
    无法ssh远程的解决办法
    关于put和patch区别的一篇文章
    一遍关于django rest framework serializer比较详细的笔记
    vim 简单配置(根据编程语言不同,自动缩进)
    django rest framework 的api返回html
    django rest frmaework jwt认证
    django 信号
    刘江的博客
  • 原文地址:https://www.cnblogs.com/emily_fly/p/1743617.html
Copyright © 2011-2022 走看看