为什么它总是显示错误索引超出数组范围?

时间:2015-07-02 07:58:57

标签: c#

我在c#中制作应用程序,这是一个阻止我的问题。我的数据库表有7列,运行应用程序时需要7列。但是在SingleRow[c] = data[0].ToString();行 它告诉我一个错误,告诉我索引超出了数组的范围。请建议。我的代码如下。

public string[] RowOnly()
{
    string[] SingleRow = new string[] { };
    conn = new OleDbConnection(connStr);
    conn.Open();
    cmd = new OleDbCommand(query, conn);
    data = cmd.ExecuteReader();
    MessageBox.Show(data.HasRows.ToString());
    int i = data.FieldCount;
    while (data.Read())
    {
        for (int c = 0; c < i; c++)
        {
            SingleRow[c] = data[0].ToString();
        }                           
    }
    conn.Close();
    return SingleRow;      
}

2 个答案:

答案 0 :(得分:6)

string[] SingleRow = new string[] { };

正在创建一个长度为0

的数组

这样做:

string[] SingleRow = new string[i];

(您必须将其移至初始化i

的行之后

即:

int i = data.FieldCount;
string[] SingleRow = new string[i];

提示:只有在想要收集集合时才使用{}

e.g。 new string[]{"abc", "def"};

答案 1 :(得分:1)

这解决了问题,感谢@Maximilian Ast

 public string[] RowOnly()
    {

        conn = new OleDbConnection(connStr);
        conn.Open();
        cmd = new OleDbCommand(query, conn);
        data = cmd.ExecuteReader();
        MessageBox.Show(data.HasRows.ToString());
        int i = data.FieldCount;
        List<string> SingleRow = new List<string>();
       while (data.Read())
        {
            for (int c = 0; c < i; c++)
            {
                SingleRow.Add(data[c].ToString());
            }

        }
        conn.Close();
        return SingleRow.ToArray();

    }