System.ArgumentNullException:参数列不能为空

时间:2018-07-09 18:02:00

标签: c# datarelation

因此,对于一个学校项目,我需要遵循一本名为《使用C#数据库进行编程》的书的说明。在本章中,我需要使用Bindingsources等创建一个datagridview。因此,在此线程的标题中出现错误的地方是在定义DataRelation时。代码如下:

private void CreateDataRelation()
{
    DataColumn dataColumnParent, dataColumnChild;

    //Hier definieer ik de variabelen dataColumnParent en Child en koppel ik ze aan de keys.
    dataColumnParent = datasetRugby.Tables["RugbyTeams"].Columns["Id"];
    dataColumnChild = datasetRugby.Tables["Spelers"].Columns["TeamId"];

    //Dit is de uiteindelijke relatie die wordt aangemaakt die ik later zal toevoegen aan DataSet.
    DataRelation dataRelationTeamSpeler = new DataRelation("relationTeamSpeler",
        dataColumnParent,
        dataColumnChild);

    //Op regel 118 voeg ik de relatie toe aan de DataSet.
    datasetRugby.Relations.Add(dataRelationTeamSpeler);

    //Hier zet ik de foreignkey van de dataset van Spelers en koppel ik hem aan de dataColumnChild.
    ForeignKeyConstraint foreignKeyConstraintTeamSpeler = dataRelationTeamSpeler.ChildKeyConstraint;

    //Hiermee geef ik aan dat je de team niet mag verwijderen als er nog spelers in dat team spelen.
    foreignKeyConstraintTeamSpeler.DeleteRule = Rule.None;

    //Als de Id van het team veranderd dan moet het teamId meeveranderen van alle spelers die in dat team spelen doormiddel van regel 129.
    foreignKeyConstraintTeamSpeler.UpdateRule = Rule.Cascade;

}

发生错误的行是此代码行

DataRelation dataRelationTeamSpeler = new DataRelation("relationTeamSpeler",
            dataColumnParent,
            dataColumnChild);`

我和同学们都不知道该如何解决。我们比较了代码,它们都具有相同的代码,因为这些书告诉我们该怎么做,但由于某种原因,错误只在我身上发生。

我该怎么办?帮助:(

干杯

1 个答案:

答案 0 :(得分:0)

尽管这是家庭作业,但是您已经发布了一个可以接受的MCVE,并尝试了解决该问题,所以让我为您提供一些提示。

您当前的问题的答案是,dataColumnParentdataColumnParent中的一个(或两个都)为空。找出问题所在的秘诀是Google搜索所收到的错误消息并阅读文档。

文档指出:

  

将空引用(在Visual Basic中为Nothing)传递给不接受为有效参数的方法时引发的异常。

如果您go to the documentation用于DataRelation类,并且看到它的构造函数详细信息,则说明ArgumentNullException的条件是:

  

一个或两个DataColumn对象包含null。

本质上,您的问题归结为当期望null值时将non-null值传递给构造函数。

换句话说,以下两行之一或全部返回null

datasetRugby.Tables["RugbyTeams"].Columns["Id"];
dataColumnChild = datasetRugby.Tables["Spelers"].Columns["TeamId"];

所以您应该找出原因。就像其他用户提到的那样,您可能误拼了表或列名。


调试

在这种情况下找出问题的最佳方法是调试代码。假设您是一个新手,请按以下步骤操作:

在Visual Studio编辑器中,您可以单击行号左侧的灰色竖线,这将放置一个由红点表示的break-point。以下是一个非常简单的示例。

enter image description here

确保您的项目处于Debug模式。

enter image description here

现在运行您的程序,代码执行将在您放置断点的位置暂停/停止。

enter image description here

如果将鼠标悬停在变量上,您可以看到其当前内容。

enter image description here

还有LocalsWatch等窗口,它们也将有助于查看变量的内容。

enter image description here

通过检查变量的内容(在您的情况下为dataColumnParentdataColumnParent),您通常可以轻松地缩小问题范围。

最后,这里是一些调试方面的好资源。

祝你好运!