Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在数据集中循环并插入列表框时出错_C#_Sql_Winforms_Datatable_Dataset - Fatal编程技术网

C# 在数据集中循环并插入列表框时出错

C# 在数据集中循环并插入列表框时出错,c#,sql,winforms,datatable,dataset,C#,Sql,Winforms,Datatable,Dataset,这是一个windows窗体应用程序。我有一个类Program.cs和一个表单DeployerConsole.cs,上面有一个列表框。我正在尝试循环处理SQL查询的结果。我遇到问题,无法获取“对象引用未设置为对象的实例”。尝试访问数据并将其插入表单上的列表框时出错 编辑:SQL查询正在成功完成,并且Console.WriteLine正在使用正确的数据正确输出到输出窗口 static void LoadServers() { DeployerConsole DC =

这是一个windows窗体应用程序。我有一个类Program.cs和一个表单DeployerConsole.cs,上面有一个列表框。我正在尝试循环处理SQL查询的结果。我遇到问题,无法获取“对象引用未设置为对象的实例”。尝试访问数据并将其插入表单上的列表框时出错

编辑:SQL查询正在成功完成,并且Console.WriteLine正在使用正确的数据正确输出到输出窗口

    static void LoadServers()
    {
        DeployerConsole DC = (DeployerConsole)Application.OpenForms["DeployerConsole"];
        //DeployerConsole DC = new DeployerConsole();
        SqlConnection myConnection = new SqlConnection("server=XXX; database=XXX; uid=XXX; pwd=XXX;Integrated Security=true;Connection Lifetime=5;Trusted_Connection=yes;");
        myConnection.Open();
        DataSet ds = new DataSet();
        SqlCommand myCommand = new SqlCommand("SELECT ServerName FROM DeployServers", myConnection);
        SqlDataAdapter adapter = new SqlDataAdapter(myCommand);
        adapter.Fill(ds);
        DataTable dt = ds.Tables[0];
        foreach (DataRow dr in dt.Rows)
        {
            DC.listBox1.Items.Add(dr["ServerName"].ToString());
            Console.WriteLine(dr["ServerName"].ToString());
        }
       
    }
编辑:添加屏幕截图

有人对我做错了什么有什么建议或指导吗

编辑(回答):嗯,我把代码从类移到了表单中。现在访问列表框没有问题。但是,我仍然想知道解决方案。

可能值得一试(仅用于测试目的):

这可能会给你一个线索,如果你需要确保SomeplaceListBox1被实例化的话

 DC.listBox1 = new ListBox();
编辑

可能是DC没有通过引用正确地传递给静态方法。 最好更改方法的签名以接受表单

static void LoadServers(Form form)
{ 
 ...
 form.listBox1.Items.Add(...)
 ... etc.
}
并从以下形式将其称为假设:

Helper.LoadServers(this);

您的问题可能是由以下代码行引起的:

DeployerConsole DC = (DeployerConsole)Application.OpenForms["DeployerConsole"];

我怀疑OpenForms属性返回null,因为您没有显式设置表单的名称(例如form.name=“DeployerConsole”)

listBox1是否实例化?调试会话期间,当您在Visual Studio中将鼠标移到调试器上时,调试器会说什么?这到底是哪一行出现故障?DC.listBox1.Items.Add(dr[“ServerName”].ToString());顺便问一下,“DC”是什么?那是表格吗?它是“this”表单还是对另一个表单的引用?当我使用“DC.listBox1=new ListBox();”时我也得到了同样的错误。我认为这与类如何与表单上的列表框(DeployerConsole)对话有关。这也是一个很大的可能性。我注意到这是一种静态方法。该方法是否以某种方式正确引用了表单的单例?DC==null吗?即使在使用检查“if(DC.listBox1!=null)”时也会抛出相同的错误。您能详细介绍一下您的解释和示例吗?我只是说应用程序。OpenForms[“DeployerConsole”]可能会返回null,因为您尚未设置窗体的名称。该名称在属性窗口中设置为DeployerConsole。我认为你说的是对的,它是空的。我相信当我链接到课堂上的表格时,我做错了什么。请看我修改后的答案。
DeployerConsole DC = (DeployerConsole)Application.OpenForms["DeployerConsole"];