Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 索引超出范围异常(位置0处无行)_C#_Asp.net Mvc_Stored Procedures_Model View Controller_Exception Handling - Fatal编程技术网

C# 索引超出范围异常(位置0处无行)

C# 索引超出范围异常(位置0处无行),c#,asp.net-mvc,stored-procedures,model-view-controller,exception-handling,C#,Asp.net Mvc,Stored Procedures,Model View Controller,Exception Handling,我尝试从视图模型调用一个存储过程到ActionResult中 当我试图运行我的代码时,我得到了一个错误 IndexOutOfRangeException由用户代码处理-位置0处无行 这是一个新创建的表,是空的,但是为什么不触发存储过程来插入数据呢?这是我的密码 调用过程CreateSecureRequestOutput public static void CreateSecureRequestOutcome( OracleTransaction trans, dsAdmin.SECURE

我尝试从视图模型调用一个存储过程到ActionResult中

当我试图运行我的代码时,我得到了一个错误

IndexOutOfRangeException由用户代码处理-位置0处无行

这是一个新创建的表,是空的,但是为什么不触发存储过程来插入数据呢?这是我的密码

调用过程CreateSecureRequestOutput

 public static void CreateSecureRequestOutcome(
 OracleTransaction trans,
 dsAdmin.SECURE_REQUEST_OUTCOMESRow outcomeRow)
  {
   using (OracleCommand cm = new OracleCommand())
  {
   cm.Connection = trans.Connection;
   cm.Transaction = trans;
   cm.CommandText = "TheService.PKG#SECURE_REQUEST.SECURE_REQUEST_OUTCOME";
   cm.CommandType = CommandType.StoredProcedure;
   cm.AddToStatementCache = true;

 OracleParameter param = cm.Paramaters.Add("P_KEEP_PERSON_ID", OracleDBType.Decimal, Paremeter.Direction.Input);
 param.Value = keepPersonID;

 param = cm.Paramaters.Add("P_SECURE_REQUEST_GUID", OracleDBType.Raw, 16, null, Paremeter.Direction.Input);
 param.Value = outcomeRow.SECURE_REQUEST_GUID;

 param = cm.Parameters.Add("P_OUTCOME_TIMESTAMP", OracleDBType.Object, Paremeter.Direction.Output);
  }
}
 cm.ExecuteNonQuery();
标识已确认的ViewModel控制器

[httpPost]
public ActionResult IdentityConfirmed(FormCollection collection)
{
 dsAdmin.SECURE_REQUESTS_OUTCOMESRow secReqOutRow;

using (OracleConnection cn = new OracleConnection (OracleConnectionManager.GetProxyServiceConnetionString()))
{
    cn.Open();
    using (OracleTransaction trans = cn.BeginTransaction())
    {
          using (Data.dsAdminTableAdapters.SECURE_REQUESTS_OUTCOMESTableAdapter taOut = new Data.dsAdminTableAdapters.SECURE_REQUESTS_OUTCOMESTableAdapter();
          {
             typedDatasetFiller.ApplyConnection(taOut, cn);
             secReqOutRow = taOut.GetDataBySecureGUID(request.ToByteArray())[0];
          }
            secReqOutRow.OUTCOME_TIMESTAMP = DateTime.Now.AddMonths(1);
            Support.CreateSecureRequestOutcome(trans, secReqOutRow);
            trans.Commit();
      }
    cn.Close();
  }
 retrun View("IdentityConfirmed", vm);
}
你认为这个错误是什么意思?为什么不正确调试

简而言之,
getDatabaseCureGuid
返回一个空数组,因此访问索引0无效


请按以下方式更改您的代码:

var results = taOut.GetDataBySecureGUID(request.ToByteArray());           
secReqOutRow = results[0];
现在在第二行设置一个断点,并检查
结果的值。有多少元素


我打赌没有,因为这正是例外的意思。您试图使用大于允许的最大索引的索引访问集合中的元素。您试图访问第一个元素并获取此错误意味着没有第一个元素,因此集合中根本没有元素。

您是否在Google中搜索过您的异常消息?您在哪一行得到此错误?我在这里得到错误secReqOutRow=taOut.getDatabaseCureGuid(request.ToByteArray())[0];您应该首先检查
secReqOutRow
是否包含数据,然后再将索引器放入其中。您使用的语句缺少右大括号,并且分号错误。可能只是一个输入错误?@Abbas,另一种方法是正确的-在将任何内容分配给
secReqOutRow
之前,他应该先验证
getDatabaseCureGuid
是否包含数据,然后再将索引器放入其中。实际上,我在该行上加了一个分隔符,它返回的是一个字节数值。XXXX00XXXXX-x0xx-xxxx-0120-xxxx-XXXXX 2xX0xXX,数字/字母。因此有一个值
request.ToByteArray()
可能包含一个值,但
GetDatabaseCureGuid
返回一个空数组/列表。我建议你在一秒钟内调试我要写在答案中的内容,然后告诉我有数据。你的权利是0,我对C#是如此陌生,我如何获得数据?这是一个新问题的素材。到目前为止,已经解释了错误,您应该将答案标记为已接受。