C# InvalidArgument=值“1”对“索引”无效

C# InvalidArgument=值“1”对“索引”无效,c#,ms-access,C#,Ms Access,我的C应用程序与MDB access DB交互时出错 错误是: InvalidArgument=值“1”对“索引”无效 我的代码: objConn.Open(); listView1.Items.Clear(); OleDbCommand cmd = new OleDbCommand("select a.bill_Id,a.bill_Number,a.bill_Date,c.sup_Name,Sum(b.de_NetPrice),a.bill_Note from (suppliers c rig

我的C应用程序与MDB access DB交互时出错

错误是:

InvalidArgument=值“1”对“索引”无效

我的代码:

objConn.Open();
listView1.Items.Clear();
OleDbCommand cmd = new OleDbCommand("select a.bill_Id,a.bill_Number,a.bill_Date,c.sup_Name,Sum(b.de_NetPrice),a.bill_Note from (suppliers c right JOIN bills a on c.sup_Id = a.bill_From) LEFT JOIN  bill_Details b on a.bill_Id = b.bill_Id where a.bill_Id like '%" + txbSearch.Text + "%' or a.bill_Number like '%" + txbSearch.Text + "%' or c.sup_Name like '%" + txbSearch.Text + "%' or a.bill_Note like '%" + txbSearch.Text + "%'  group by a.bill_Id,a.bill_Number,a.bill_Date,c.sup_Name,a.bill_Note order by a.bill_Date desc", objConn);
OleDbDataReader dataReader = cmd.ExecuteReader();

int i = 0;
while (dataReader.Read())
{
    DateTime dt0 = DateTime.Parse(dataReader.GetValue(2).ToString());
    int Date1 = DateTime.Compare(DateTime.Parse(dt0.ToShortDateString()), DateTime.Parse(txbFrom.Value.ToShortDateString()));
    int Date2 = DateTime.Compare(DateTime.Parse(dt0.ToShortDateString()), DateTime.Parse(txbTo.Value.ToShortDateString()));
    if (Date1 >= 0 && Date2 <= 0)
    {
        listView1.Items.Add(dataReader.GetValue(0).ToString());

        // The error happens on the following line
        listView1.Items[i].SubItems.Add(dataReader.GetValue(1).ToString());

        listView1.Items[i].SubItems.Add(dt0.ToShortDateString());
        listView1.Items[i].SubItems.Add(dataReader.IsDBNull(3) ? "0" : dataReader.GetString(3));
        listView1.Items[i].SubItems.Add(dataReader.IsDBNull(4) ? "0" : dataReader.GetDouble(4).ToString("n2"));
        listView1.Items[i].SubItems.Add(dataReader.IsDBNull(5) ? "-" : dataReader.GetString(5));
    }

    i++;
}

objConn.Close();
listview具有以下列:
ID-编号-账单日期-供应商-总计-注意

我可能发现了问题


如果第一次出现在'If Date1>=0&&Date2 dataReader.GetValue1??String.Empty.ToString看看helps@bill,不可为空!如果访问插槽1会给您带来错误,您能否使用调试器检查dataReader对象,以确保它包含您需要的内容?@BenKnoble这是令人困惑的部分,如果访问插槽1导致崩溃,他如何能够在几行之前访问插槽2而不发生崩溃。我假设1是空的,但他说它不是空的。
if (Date1 >= 0 && Date2 <= 0)
{
    listView1.Items.Add(dataReader.GetValue(0).ToString());
    listView1.Items[i].SubItems.Add(dataReader.GetValue(1).ToString());// The error appears on this line

    listView1.Items[i].SubItems.Add(dt0.ToShortDateString());
    listView1.Items[i].SubItems.Add(dataReader.IsDBNull(3) ? "0" : dataReader.GetString(3));
    listView1.Items[i].SubItems.Add(dataReader.IsDBNull(4) ? "0" : dataReader.GetDouble(4).ToString("n2"));
    listView1.Items[i].SubItems.Add(dataReader.IsDBNull(5) ? "-" : dataReader.GetString(5));
    i++;
}