C# 对象引用未设置为对象的实例。C

C# 对象引用未设置为对象的实例。C,c#,database,object,C#,Database,Object,我可以从数据库中获取记录并将其放入对象中 for (int i = 0; i < selectedFishes.Length; i++) { string stm = "SELECT * FROM Data WHERE name='" + selectedFishes[i] + "'"; SQLiteCommand cmd = new SQLiteCommand(stm, conn); SQLiteDataReader rdr = cmd.ExecuteReader

我可以从数据库中获取记录并将其放入对象中

for (int i = 0; i < selectedFishes.Length; i++)
{
    string stm = "SELECT * FROM Data WHERE name='" + selectedFishes[i] + "'";
    SQLiteCommand cmd = new SQLiteCommand(stm, conn);
    SQLiteDataReader rdr = cmd.ExecuteReader();
    while (rdr.Read())
    {
        fish[i] = new fish(rdr.GetString(0), rdr.GetDouble(1), rdr.GetDouble(2), rdr.GetDouble(3), rdr.GetDouble(4));
        Console.WriteLine(fish[i].name + " " + fish[i].value1 + " " + fish[i].value2 + " " + fish[i].value3 + " " + fish[i].value4);//it can be displayed into console
    }
}

MessageBox.Show(selectedFishes.Length.ToString()+" "+fish.Length.ToString());//results are same if the value >5 cant be displayed
for (int i = 0; i < fish.Length; i++)
{
   Console.WriteLine(fish[i].name + " " + fish[i].value1 + " " + fish[i].value2 + " " + fish[i].value3 + " " + fish[i].value4);

}
为什么不能展示? 错误isObject引用未设置为对象的实例
之前谢谢你

我在胡乱猜一猜,说的是精选的鱼。长度可能不等于鱼。长度。准确地说,前者很可能比后者少

这意味着您只为selectedFishes.Length-1的索引0创建对象,然后尝试访问仍然为null并导致该异常的索引selectedFishes.Length

要解决这个问题,您可以更改第二个for循环的上限,或者在其内部执行null检查


编辑:你真的想在第一个for循环中使用while循环吗?我在while循环中没有改变,所以您可以继续将fish对象添加到相同的数组索引中

按f9将断点添加到第二个控制台写入线。按f5。让您的程序命中断点。检查ifname或value1-4是否为空。添加代码以处理空值

> P>我总是说在Null RetryExchange中,尝试对每个你期望有值的对象串。

哪一行是错误发生的?第二控制台。写在消息框上是否得到正确的O/P?不相关,但是考虑使用SqLeTimeMMand的参数属性,而不是简单地串接字符串。这将使您的代码的这一部分对恶意输入更加安全。@Theodoroschatzigannakis:不仅仅是一点安全-更安全。是的,这符合所描述的症状。我会说selectedFishes.Length