правильный способ обработки данных, возвращаемых хранимой процедурой в сущности - PullRequest
0 голосов
/ 27 сентября 2018

Я продолжаю сталкиваться с этой ошибкой

В считывателе данных, возвращенном поставщиком данных хранилища, недостаточно столбцов для запрошенного запроса.

Я пробовал разныеспособы обработки возврата, но ни один из них не работает.

var r = myDb.spInsertBankDeposit(accountNumber, serialID,
                                 payer, transferFrom, decimal.Parse(depAmount, CultureInfo.InvariantCulture),
                                 remarks, fulldate, time,tradingCh, 2);

^ это вызов прямо из сущности БД myDB, я пытался с .FirstOrDefault(), ToList(), ToString()- та же ошибка

public string InsertBankDeposit(DepositTransactionModel m)
    {
        return DO_DB.spInsertBankDeposit(m.AccountNumber, m.SerialCode, m.AppliedAccountName, m.AppliedAccountNumber, decimal.Parse(m.DepositAmount, CultureInfo.InvariantCulture),
                                            m.Remarks, m.TransactionDate, m.TransactionTime, m.TradingChannel, m.PlatformID).FirstOrDefault().Msg;
    }

^ это также не работает, когда я звоню var r = spInsertBankDeposit(model)

Я не могу показать весь sp, но это последняя строка .. SELECT 'Success|Deposit transaction saved successfully!' AS [Msg]

ОБНОВЛЕНИЕ / РЕДАКТИРОВАНИЕ: Здесь вызывается метод InsertBankDeposit: enter image description here

^ это прекрасно работает.Но когда я вызываю один и тот же InsertBankDeposit внутри цикла dr.Reader() следующим образом:

    foreach (DataRow row in result.Tables[0].Rows)
    {
       var r = spInsertBankDeposit(model);
       //string s = spInsertBankDeposit(model);
    }

, я всегда заканчиваю с ошибкой, указанной выше. enter image description here

Вот sp от сущности.Также пробовал со скалярной строкой.Та же ошибка.enter image description here

enter image description here

Мне интересно, в чем проблема, поскольку у меня есть метод, который вызывает ту же функцию InsertBankDeposit, котораяработает отлично.Я получаю сообщение об ошибке, когда вызываю его в цикле чтения файла Excel.

1 Ответ

0 голосов
/ 27 сентября 2018

Одна из причин, которая может привести к ошибке, заключается в том, что хранимая процедура завершается раньше и не возвращает ожидаемую строку.Вы можете проверить это, изменив SP и удалив весь лишний код и просто вернув строку.Если это работает, то проблема заключается в том, что внутри кода, который вы удалили, а не в том, как вы вызываете SP.

...