title: Error in retrieving rows from DataTable in C#
body: <p>Question - I get an error after the line <code>MessageBox.Show("for loop, last row..."); //TEST CODE</code> executes. What could be the cause ? When I get my result set from another database, there is no such problem. :( How do I fix this ?</p>
  
  <p>Code - </p>
  
  <pre><code>    public void Main()
      {
  
          OleDbDataAdapter oleDA = new OleDbDataAdapter();
          DataTable dt = new DataTable();
          DataColumn col = null;
          DataRow row = null;
          string strCols = "";
  
          oleDA.Fill(dt, Dts.Variables["MyResultSet"].Value);
          col = dt.Columns["MyColumn"];
  
          int lastIdx = dt.Rows.Count - 1;
  
          MessageBox.Show("int declared, for loop..."); //TEST CODE
  
          //loop upto 2nd last data row
          for (int i = 0; i &lt;= lastIdx-1; i++)
          {
              row = dt.Rows[i];
              strCols += row[col.Ordinal].ToString() + ", ";
          }
  
          MessageBox.Show("for loop, last row..."); //TEST CODE
  
          row = dt.Rows[lastIdx];
          strCols += row[col.Ordinal].ToString(); //!!! I GET ERROR HERE !
  
          MessageBox.Show("strCols");
  
          Dts.TaskResult = (int)ScriptResults.Success;
  
      }
  </code></pre>
  
  <p>Error - </p>
  
  <pre><code>Error: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---&gt; System.IndexOutOfRangeException: There is no row at position -1.
     at System.Data.RBTree`1.GetNodeByIndex(Int32 userIndex)
     at System.Data.RBTree`1.get_Item(Int32 index)
     at System.Data.DataRowCollection.get_Item(Int32 index)
     at My-Long-Code-Goes-Here.csproj.ScriptMain.Main()
     --- End of inner exception stack trace ---
     at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct&amp; sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
     at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
     at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
     at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
     at Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()
  </code></pre>