C# 发送请求和参数时不调用存储过程

C# 发送请求和参数时不调用存储过程,c#,asp.net-mvc,entity-framework,stored-procedures,C#,Asp.net Mvc,Entity Framework,Stored Procedures,我在C中有一个ASP.NET MVC应用程序,我在其中调用一个存储过程CreateFunctionNavigation。我在调用该存储过程和参数时遇到问题。我有模范班 模范班 存储过程: ALTER PROCEDURE [dbo].[CreateFunctionNavigation] @FunctionName nvarchar(250), @Hierarchy_Level INT, @Function_identity INT OUTPUT, @ControllerName nva

我在C中有一个ASP.NET MVC应用程序,我在其中调用一个存储过程CreateFunctionNavigation。我在调用该存储过程和参数时遇到问题。我有模范班

模范班

存储过程:

ALTER PROCEDURE [dbo].[CreateFunctionNavigation] 
 @FunctionName nvarchar(250),
 @Hierarchy_Level INT,
 @Function_identity INT OUTPUT, 
 @ControllerName nvarchar(250), 
 @Controller_identity INT OUTPUT,
 @ControllerInFunction_identity INT OUTPUT,
 @ActionName nvarchar(250),
 @Action_identity INT OUTPUT,
 @ActionInFunction_identity INT OUTPUT,
 @Function_ParentsFunctionID INT,
 @Function_ParentsFunction_identity INT OUTPUT
AS
BEGIN
  SET NOCOUNT ON;

  INSERT INTO [dbo].[Navigation_Functions] ([FunctionName],[Hierarchy_Level]) 
  VALUES(@FunctionName, @Hierarchy_Level)

  SET @Function_identity = SCOPE_IDENTITY()

  INSERT INTO [dbo].[Navigation_FunctionController] ([ControllerName])
  VALUES(@ControllerName)

  SET @Controller_identity = SCOPE_IDENTITY()

  INSERT INTO [dbo].[Navigation_FunctionInController] ([Function_ID], [ControllerID])
  VALUES (@Function_identity, @Controller_identity)

  SET @ControllerInFunction_identity = SCOPE_IDENTITY()

  INSERT INTO [dbo].[Navigation_FunctionAction] ([ActionName], [ControllerID])
  VALUES (@ActionName, @Controller_identity)

  SET @Action_identity = SCOPE_IDENTITY()

  INSERT INTO [dbo].[Navigation_FunctionInAction] ([ActionID], [Function_ID])
  VALUES (@Action_identity, @Function_identity)

  SET @ActionInFunction_identity = SCOPE_IDENTITY()

  INSERT INTO [dbo].[Navigation_FunctionHierarchy] ([Function_IDs], [Parent_Function_ID])
  VALUES (@Function_identity, @Function_ParentsFunctionID)

  SET @Function_ParentsFunction_identity = SCOPE_IDENTITY()

  RETURN
END
现在在C类中,我尝试使用传递的参数运行此存储过程,但在SQL Server Profiler中,我看不出是否未调用此存储过程

运行存储过程的C代码

 var _result = dbContext.Database.SqlQuery<CreateFunctionNavigation_SP_Map>("exec CreateFunctionNavigation @FunctionName @FunctionHierarchy_Level @ControllerName @ActionName @Function_ParentsFunctionID", 
                 new SqlParameter("FunctionName",_entity.FunctionName),
                 new SqlParameter("FunctionHierarchy_Level",_entity.FunctionHierarchy_Level),
                 new SqlParameter("ControllerName", _entity.ControllerName),
                 new SqlParameter("ActionName", _entity.ActionName),
                 new SqlParameter("Function_ParentsFunctionID",_entity.Function_ParentsFunctionID)

                 );
但如果我运行这个存储过程,只调用它而不带参数,当然,只调用带有select语句的存储过程,那么它就可以工作了,我还可以在SQL Profiler中看到调用了该存储过程

工作C代码

List<CreateFunctionNavigation_SP_Map> query;
query = dbContext.Database.SqlQuery<CreateFunctionNavigation_SP_Map>("exec CreateFunctionNavigation").ToList();

所以我认为问题是C类,在这里我试图调用SP和参数。我陷入困境,尝试了不同的选择,但不知道我做错了什么。非常感谢

您是否尝试在参数名称之间添加逗号

dbContext.Database.SqlQuery<CreateFunctionNavigation_SP_Map>("exec CreateFunctionNavigation @FunctionName, @FunctionHierarchy_Level, @ControllerName, @ActionName, @Function_ParentsFunctionID"
这会将所有输出放在函数的末尾

对,在你的c代码上

var function_identity new SqlParameter() {ParameterName = "Function_identity", Direction = ParameterDirection.Output};
var controller_identity new SqlParameter() {ParameterName = "Controller_identity", Direction = ParameterDirection.Output};
var controllerInFunction_identity new SqlParameter() {ParameterName = "ControllerInFunction_identity", Direction = ParameterDirection.Output};
var action_identity new SqlParameter() {ParameterName = "Action_identity", Direction = ParameterDirection.Output};
var actionInFunction_identity new SqlParameter() {ParameterName = "ActionInFunction_identity", Direction = ParameterDirection.Output};
var function_ParentsFunction_identity new SqlParameter() {ParameterName = "Function_ParentsFunction_identity", Direction = ParameterDirection.Output};

var _result = dbContext.Database.SqlQuery<CreateFunctionNavigation_SP_Map>("exec CreateFunctionNavigation @FunctionName, @FunctionHierarchy_Level, @ControllerName, @ActionName, @Function_ParentsFunctionID, @Function_identity out, @Controller_identity out, @ControllerInFunction_identity out, @Action_identity out, @ActionInFunction_identity out, @Function_ParentsFunction_identity out", 
             new SqlParameter("FunctionName",_entity.FunctionName),
             new SqlParameter("FunctionHierarchy_Level",_entity.FunctionHierarchy_Level),
             new SqlParameter("ControllerName", _entity.ControllerName),
             new SqlParameter("ActionName", _entity.ActionName),
             new SqlParameter("Function_ParentsFunctionID",_entity.Function_ParentsFunctionID),
function_identity ,
controller_identity ,
controllerInFunction_identity ,
action_identity ,
actionInFunction_identity,
function_ParentsFunction_identity 

             );

这可能会让你接近某个地方。

这是我的答案;它正在工作

 List<GetNewlyCreatedNavigationsFunction_SP_Map> _query;

             var function_identity_out = new SqlParameter("Function_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };
             var controller_identity_out = new SqlParameter("Controller_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };
             var controllerInFunction_identity_out = new SqlParameter("ControllerInFunction_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };
             var action_identity_out = new SqlParameter("Action_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };
             var actionInFunction_identity_out = new SqlParameter("ActionInFunction_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };
             var function_ParentsFunction_identity_out = new SqlParameter("Function_ParentsFunction_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };


             _query = dbContext.Database.SqlQuery<GetNewlyCreatedNavigationsFunction_SP_Map>("exec CreateFunctionNavigation @FunctionName, @Hierarchy_Level, @ControllerName, @ActionName, @Function_ParentsFunctionID, @Function_identity out, @Controller_identity out, @ControllerInFunction_identity out, @Action_identity out, @ActionInFunction_identity out, @Function_ParentsFunction_identity out",
                new SqlParameter("@FunctionName", _entity.FunctionName),
                new SqlParameter("@Hierarchy_Level", _entity.FunctionHierarchy_Level),
                new SqlParameter("@ControllerName", _entity.ControllerName),
                new SqlParameter("@ActionName", _entity.ActionName),
                new SqlParameter("@Function_ParentsFunctionID", _entity.Function_ParentsFunctionID),
                function_identity_out,
                controller_identity_out,
                controllerInFunction_identity_out,
                action_identity_out,
                actionInFunction_identity_out,
                function_ParentsFunction_identity_out 
              ).ToList();

即使使用逗号,也没有结果。多谢指导,我已经设法解决了这个问题,代码在我上面的答案中
var function_identity new SqlParameter() {ParameterName = "Function_identity", Direction = ParameterDirection.Output};
var controller_identity new SqlParameter() {ParameterName = "Controller_identity", Direction = ParameterDirection.Output};
var controllerInFunction_identity new SqlParameter() {ParameterName = "ControllerInFunction_identity", Direction = ParameterDirection.Output};
var action_identity new SqlParameter() {ParameterName = "Action_identity", Direction = ParameterDirection.Output};
var actionInFunction_identity new SqlParameter() {ParameterName = "ActionInFunction_identity", Direction = ParameterDirection.Output};
var function_ParentsFunction_identity new SqlParameter() {ParameterName = "Function_ParentsFunction_identity", Direction = ParameterDirection.Output};

var _result = dbContext.Database.SqlQuery<CreateFunctionNavigation_SP_Map>("exec CreateFunctionNavigation @FunctionName, @FunctionHierarchy_Level, @ControllerName, @ActionName, @Function_ParentsFunctionID, @Function_identity out, @Controller_identity out, @ControllerInFunction_identity out, @Action_identity out, @ActionInFunction_identity out, @Function_ParentsFunction_identity out", 
             new SqlParameter("FunctionName",_entity.FunctionName),
             new SqlParameter("FunctionHierarchy_Level",_entity.FunctionHierarchy_Level),
             new SqlParameter("ControllerName", _entity.ControllerName),
             new SqlParameter("ActionName", _entity.ActionName),
             new SqlParameter("Function_ParentsFunctionID",_entity.Function_ParentsFunctionID),
function_identity ,
controller_identity ,
controllerInFunction_identity ,
action_identity ,
actionInFunction_identity,
function_ParentsFunction_identity 

             );
 List<GetNewlyCreatedNavigationsFunction_SP_Map> _query;

             var function_identity_out = new SqlParameter("Function_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };
             var controller_identity_out = new SqlParameter("Controller_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };
             var controllerInFunction_identity_out = new SqlParameter("ControllerInFunction_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };
             var action_identity_out = new SqlParameter("Action_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };
             var actionInFunction_identity_out = new SqlParameter("ActionInFunction_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };
             var function_ParentsFunction_identity_out = new SqlParameter("Function_ParentsFunction_identity", SqlDbType.Int) { Direction = System.Data.ParameterDirection.Output };


             _query = dbContext.Database.SqlQuery<GetNewlyCreatedNavigationsFunction_SP_Map>("exec CreateFunctionNavigation @FunctionName, @Hierarchy_Level, @ControllerName, @ActionName, @Function_ParentsFunctionID, @Function_identity out, @Controller_identity out, @ControllerInFunction_identity out, @Action_identity out, @ActionInFunction_identity out, @Function_ParentsFunction_identity out",
                new SqlParameter("@FunctionName", _entity.FunctionName),
                new SqlParameter("@Hierarchy_Level", _entity.FunctionHierarchy_Level),
                new SqlParameter("@ControllerName", _entity.ControllerName),
                new SqlParameter("@ActionName", _entity.ActionName),
                new SqlParameter("@Function_ParentsFunctionID", _entity.Function_ParentsFunctionID),
                function_identity_out,
                controller_identity_out,
                controllerInFunction_identity_out,
                action_identity_out,
                actionInFunction_identity_out,
                function_ParentsFunction_identity_out 
              ).ToList();