2015-10-09 68 views
-3

我有这样的代码在我的应用程序代码“IndexOutOfRangeException”错误。任何想法为什么?

using (SqlConnection oConn = new SqlConnection(ConfigurationManager.ConnectionStrings["data.user"].ToString())) 
{ 
    oConn.Open(); 
    using (SqlCommand oCmd = new SqlCommand(strQuery, oConn)) 
    { 
     oCmd.CommandType = CommandType.StoredProcedure; 
     oCmd.Parameters.Add(new SqlParameter("@J_ID", SqlDbType.NVarChar, 50)); 
     oCmd.Parameters["@J_ID"].Value = JobID; 

     using (SqlDataReader drJobDetails = oCmd.ExecuteReader()) 
     { 
      if (drJobDetails.Read()) 
      { 
       Jobs oJob = new Jobs(); 
       oJob.JobIDNumber = 1; 
       oJob.JobID = drJobDetails[drJobDetails.GetOrdinal("J_ID")] as string; 
       oJob.JobTitle = drJobDetails[drJobDetails.GetOrdinal("J_Title")] as string; 
       oJob.JobShortDescription = ""; 
       oJob.JobDescription = drJobDetails[drJobDetails.GetOrdinal("J_Description")] as string; 
       oJob.JobLocation = drJobDetails[drJobDetails.GetOrdinal("BDS_Name")] as string; 
       oJob.JobHREmail = drJobDetails[drJobDetails.GetOrdinal("J_HREmail")] as string; 
       oJob.JobDateAdded = drJobDetails[drJobDetails.GetOrdinal("J_DateAdded")] as DateTime? ?? default(DateTime); 
       oJob.JobUserAdded = drJobDetails[drJobDetails.GetOrdinal("J_UserAdded")] as string; 
       oJob.JobCloseDate = drJobDetails[drJobDetails.GetOrdinal("BJ_ClosedDate")] as DateTime? ?? default(DateTime); 
       oJob.JobDateUpdated = drJobDetails[drJobDetails.GetOrdinal("J_DateUpdated")] as DateTime? ?? default(DateTime); 
       oJob.JobUserUpdated = drJobDetails[drJobDetails.GetOrdinal("J_UserUpdated")] as string; 
       oJob.JobActive = drJobDetails[drJobDetails.GetOrdinal("J_Active")] as int? ?? default(int); 
       oJob.JobVideo = drJobDetails[drJobDetails.GetOrdinal("J_Video")] as string; 
       return oJob; 
      } 
     } 
    } 
} 

而且我得到这个错误:

[IndexOutOfRangeException: J_Video] 

如果我删除J_Video它工作正常,所以不知道可能是什么问题吧。 我对SQL和C#很陌生,所以任何提示为什么会出现这个错误会很好!

+3

显然没有'什么存储过程返回 – Andrei

+2

J_Video'列[IndexOutOfRangeException:指定的名称不是有效的列名(https://msdn.microsoft.com/en-us/library/system。 data.sqlclient.sqldatareader.getordinal(v = vs.110).aspx#Anchor_1) – sab669

+0

我们可以看到'strQuery'的内容吗? – Jamiec

回答

7

这意味着DataReader没有列名称J_Video。这列refered在这一行:

oJob.JobVideo = drJobDetails[drJobDetails.GetOrdinal("J_Video")] as string; 

检查查询strQuery,看看这列中选择(SELECT J_Video, ... FROM ...),并确保其拼写正确。

1

检查以确保Query返回J_Video列。我认为查询没有返回它。

相关问题