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();
            }
        }

 

posted on 2020-05-26 17:26  不朽阁主  阅读(347)  评论(0编辑  收藏  举报

导航