• C#带返回参数的存储过程用法


    在开发过程中遇到这样的问题,需要调用存储过程并返回参数,大体就是用ADO调存储过程

    下面是存储过程的代码,这里是带事务的

    USE []
    GO
    
    SET ANSI_NULLS ON
    GO
    
    SET QUOTED_IDENTIFIER ON
    GO
    
    CREATE PROCEDURE [dbo].[PRO_Price_TBCSJG_NEW] ( @__SKUCount INT OUTPUT)
    AS
        BEGIN TRANSACTION GetDataSet
        --创建临时表,这些请忽略
        CREATE TABLE #TempPrice_Sale (
           Price_SaleOID uniqueidentifier NOT NULL ,
           SalePrice NUMERIC(18,2) NULL,
           IsEffect BIT NULL,
           Product_SKU_FK uniqueidentifier NOT NULL ,
           UCML_Organize_FK uniqueidentifier NOT NULL 
        )
        IF @@ERROR <> 0
                GOTO ErrorHandler
        DECLARE @sqlSale AS varchar(4000)
        SET @sqlSale =''
        EXEC (@sqlSale)
        IF @@ERROR <> 0
            GOTO ErrorHandler
    
        INSERT INTO dbo.Price_Sale
        SELECT * FROM #TempPrice_Sale
    
        IF @@ERROR <> 0
            GOTO ErrorHandler
    --也就这一步赋值,以上不用管
        SELECT @__SKUCount=1
        
        IF @@ERROR <> 0
            GOTO ErrorHandler
    
        
        DROP TABLE #TempPrice_Purchase
        
        COMMIT TRANSACTION GetDataSet
        RETURN 0
    
    ErrorHandler:
    ROLLBACK TRANSACTION GetDataSet
    RETURN @@ERROR
    
    GO

    调用的部分有两种方法

    第一种,这种是通过自己写sql执行,感觉相比较于第二种更灵活点吧

                string SqlConn = "Enlist=false;Data Source=;Database=;User Id=sa;Password=;";
                using (SqlConnection conn = new SqlConnection(SqlConn))
                {
                    SqlCommand cmd = new SqlCommand("EXECUTE dbo.PRO_Price_TBCSJG_NEW @__SKUCount OUTPUT", conn);
                    conn.Open();
    
                    SqlParameter para= new SqlParameter() { ParameterName = "@__SKUCount", DbType = DbType.String, Size = 500 };
                    para.Direction = ParameterDirection.Output;
                    cmd.Parameters.AddRange(new SqlParameter[]{ GetParamOut(out para, "@__SKUCount") });
                    cmd.ExecuteNonQuery();
    
                    Console.WriteLine(para.Value.ToString());
                    Console.ReadKey();
                }

    第二种

            static void Main(string[] args)
            {
                string SqlConn = "";
                using (SqlConnection conn = new SqlConnection(SqlConn))
                {
                    SqlCommand sqlCommand = new SqlCommand("PRO_Price_TBCSJG_NEW", conn);
                    sqlCommand.CommandType = CommandType.StoredProcedure;
                    conn.Open();
                    sqlCommand.Parameters["@__CustomerCount"].Direction = ParameterDirection.InputOutput;
    
                    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
                    if (sqlCommand.Parameters["@__CustomerCount"].Value != DBNull.Value)
                    {
                        Console.WriteLine($"{sqlCommand.Parameters["@__CustomerCount"].Value}");
                    }
                    Console.ReadKey();
                }
            }
  • 相关阅读:
    七月在线爬虫班学习笔记(五)——scrapy spider的几种爬取方式
    七月在线爬虫班学习笔记(四)——相关库使用与登录问题
    七月在线爬虫班学习笔记(三)——爬虫基础知识与简易爬虫实现
    文件处理工具类
    执行脚本工具类
    LRU
    springboot 整合 memcached
    转载连接
    SpringBoot2.x中redis使用(lettuce)
    Redis 数据类型
  • 原文地址:https://www.cnblogs.com/sunff/p/12966858.html
Copyright © 2020-2023  润新知