在开发过程中遇到这样的问题,需要调用存储过程并返回参数,大体就是用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(); } }