当我将项添加到字符串数组时,C#退出方法

时间:2012-07-24 19:35:41

标签: c# winforms arraylist

我很难理解为什么当我将一个项添加到我的字符串数组“internalDives”时,该方法退出并且没有显示调试错误。

拜托,我在这里做错了什么?

private void GridDataConnection()
{
    using (SqlCeConnection conn = new SqlCeConnection(ConnectionString))
    {
        conn.Open();

        using (SqlCeCommand command = new SqlCeCommand("SELECT id,divelocation,divedate,diveduration FROM loggeddives", conn))
        {
            SqlCeDataReader readDiveResult = command.ExecuteReader();

            var diveList = new List<string[]>();

            while (readDiveResult.Read())
            {
                string[] internalDives = new string[4];

                internalDives[0] = readDiveResult.GetString(0);
                internalDives[1] = readDiveResult.GetString(1);
                internalDives[2] = readDiveResult.GetString(2);
                internalDives[3] = readDiveResult.GetString(3);

                diveList.Add(internalDives);

                i++;
            }
        }

        conn.Close();
    }
}

4 个答案:

答案 0 :(得分:2)

您确定所有列类型都是字符串吗? GetString不进行任何转换,并假设所有列都是string类型。我建议你使用try catch语句来捕获任何InvalidCastException

还检查所有值是否已实例化。您可以使用IsDBNull方法执行此操作。

答案 1 :(得分:0)

你应该做的第一件事就是抓住正在抛出的异常,就像mservidio在评论中提到的那样。

你很有可能在你做的时候发现你对GetString的一个调用抛出了一个IndexOutOfBoundsException,所以要准备好仔细检查你的代码并查看Read管道中的内容。它可能不是你的想法。

答案 2 :(得分:0)

我猜你的数据库中有空值,所以当你尝试读取其中一列时会出现错误:“Data is Null。无法在Null值上调用此方法或属性”。您必须调用IsDBNull方法来检查该值是否为null,然后读取该值。

试试这段代码

private void GridDataConnection()
{
    using (SqlCeConnection conn = new SqlCeConnection(ConnectionString))
    {
        conn.Open();

        using (SqlCeCommand command = new SqlCeCommand("SELECT id,divelocation,divedate,diveduration FROM loggeddives", conn))
        {
            SqlCeDataReader readDiveResult = command.ExecuteReader();

            var diveList = new List<string[]>();

            while (readDiveResult.Read())
            {
                string[] internalDives = new string[4];

                internalDives[0] = readDiveResult.IsDBNull(0) ? "": readDiveResult.GetString(0);
                internalDives[1] = readDiveResult.IsDBNull(1) ? "": readDiveResult.GetString(1);
                internalDives[2] = readDiveResult.IsDBNull(2) ? "": readDiveResult.GetString(2);
                internalDives[3] = readDiveResult.IsDBNull(3) ? "": readDiveResult.GetString(3);

                diveList.Add(internalDives);

                i++;
            }
        }

        conn.Close();
    }
}

答案 3 :(得分:0)

我通常在尝试将查询添加到数组或列表之前验证从查询返回的信息。快速检查以确认所有值都是字符串,甚至可以计算以验证有4个值。正如其他人提到的那样,尝试捕获非常有帮助。您还可以创建快速错误日志以将任何异常转储到临时文件中。

第一个答案是温柔的!