2015-12-15 4 views
0

Я использую EF6, и мне нужно выполнить хранимую процедуру. Он принимает два параметра:EF6 Хранимая процедура не принимает параметры

  • mIIN varchar(12), который вводится строка
  • mXMLOutput varchar(max), который является результатом выполнения

Он отлично работает, когда я называю его из Management Studio.

Однако, когда я использую следующий код:

var iinParameter = new SqlParameter("@mIIN", SqlDbType.VarChar, 12) { Value = "123456123456" }; 
var outputParameter = new SqlParameter("@mXMLContent", SqlDbType.VarChar, -1) { Direction = ParameterDirection.Output }; 
_dbContext.Database.ExecuteSqlCommand("GetInfo", iinParameter, outputParameter); 

, что приводит к ошибке

Процедура или функция 'GetInfo' ожидает параметр '@mIIN', которое не было поставлено

EF6 содержит следующие сообщения:

Started transaction at 15.12.2015 14:27:27 +06:00 
GetInfo 
-- @mIIN: '123456123456' (Type = AnsiString, IsNullable = false, Size = 12) 
-- @mXMLContent: '' (Type = AnsiString, Direction = Output, IsNullable = false, Size = -1) 
-- Executing at 15.12.2015 14:27:27 +06:00 
-- Failed in 2 ms with error: Procedure or function 'GetInfo' expects parameter '@mIIN', which was not supplied. 

Что может вызвать эту проблему? Я передаю этот параметр, почему он не принимает его?

ответ

2

Это должно работать:

_dbContext.Database.ExecuteSqlCommand("exec GetInfo @mIIN, @mXMLContent OUTPUT", iinParameter, outputParameter); 
+0

Ницца. Это действительно работает, даже без 'exec' в начале. Почему я должен указывать аргументы таким образом? Не передают ли эти аргументы самим хранимой процедуре? –

+0

К сожалению нет. Он должен выйти замуж за имя параметра в SqlParameter с текстом команды. – strickt01

0

Я думаю, что проблема в вашей подпроцедуре. Сообщение журнала сообщает, что параметр был равен GetInfo, а ошибка связана с подпроцессом IBRC_GetClientInfo. Проверьте, правильно ли передан параметр внутри.

+0

О, я очень извиняюсь за путаницу вы ... Я просто скопировал другой журнал вызовов. Я обновил свой ответ. –