处理实体中存储过程返回的数据的正确方法

时间:2018-09-27 00:08:20

标签: c# sql-server stored-procedures model-view-controller entity

我不断遇到此错误

  

商店数据提供者返回的数据读取器没有   足够用于查询的列。

我已经尝试过不同的方式来处理退货,但没有一种有效。

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

^这很好。但是,当我像这样在dr.Reader()循环内调用相同的InsertBankDeposit时:

    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 :(得分:0)

可能导致该错误的一种可能性是,如果存储过程提前退出而不返回您期望的字符串。您可以通过修改SP并删除所有多余的代码并仅返回字符串来进行测试。如果可行,则问题出在您删除的代码内部,而不是您调用SP的方式。