2015-01-26 3 views
2

У меня есть приложение ASP.NET MVC на C#, где я вызываю хранимую процедуру CreateFunctionNavigation. У меня возникла проблема с вызовом этой хранимой процедуры вместе с параметрами. У меня есть класс модели;Сохраненная процедура не вызывается при отправке запроса вместе с параметрами

Model класс

public class CreateFunctionNavigation_SP_Map 
{ 
    public CreateFunctionNavigation_SP_Map() 
    { 
    } 

    [StringLength(250)] 
    [Required(ErrorMessage = "Required Function Title")] 
    [Display(Name = "Function Title")] 
    public string FunctionName { get; set; } 

    [Required(ErrorMessage = "Required Function Hierarchy; i.e Where Function Exists In Hierarchy Tree \n Top-Level Start From 1 ")] 
    [Display(Name = "Function Hierarchy Level")] 
    public int FunctionHierarchy_Level { get; set; } 

    [StringLength(250)] 
    [Required(ErrorMessage = "Required Controller Title")] 
    [Display(Name = "Controller Title")] 
    public string ControllerName { get; set; } 

    [StringLength(250)] 
    [Required(ErrorMessage = "Required Action Title")] 
    [Display(Name = "Action Title")] 
    public string ActionName { get; set; } 

    [Required(ErrorMessage = "Required Function Parent - Child Relation ID \n Put 0 In Case Given Function doesn't Have Any Parent Function ")] 
    [Display(Name = "Function Parent's FunctionID")] 
    public int Function_ParentsFunctionID { get; set; }  
} 

Хранимая процедура:

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) 

       ); 

Но если я запускаю эту хранимую процедуру, просто назвав его без параметров и, конечно, просто хранимой процедуры с отборным заявлением, то это работает, и я могу видеть в SQL Profiler вызывается эта хранимая процедура.

Рабочая C# код

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

Так что я считаю, вопрос C# класс, где я пытаюсь вызвать SP вместе с параметрами. Я сильно застрял, попробовал разные варианты, но не знаю, что я делаю неправильно. Большое спасибо заранее

ответ

0

вот мой ответ; он работает

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

Вы пытались добавить запятые между именами параметров?

dbContext.Database.SqlQuery<CreateFunctionNavigation_SP_Map>("exec CreateFunctionNavigation @FunctionName, @FunctionHierarchy_Level, @ControllerName, @ActionName, @Function_ParentsFunctionID" 

ОБНОВЛЕНИЕ: вы также проверили свой сохраненный код proc, заметив, что с ним есть некоторые проблемы.

Вот как я бы изменить его

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

Это ставит все свои выходы в конце функции.

Право на ваш 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 

      ); 

Это может заставить вас где-то близко.

+0

нет У меня нет ??? – toxic

+0

даже с запятой, нет результата – toxic

+0

ok Я пробую это сейчас ... большое спасибо за это! – toxic

Смежные вопросы