0

因此,对于一个学校项目,我需要遵循一本名为 Programming with C# Databases 的书的说明。在本章中,我需要使用 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);`

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

我能做些什么 ?帮助 :(

干杯,

4

1 回答 1

0

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

您的直接问题的答案是,要么(或两者)dataColumnParent要么dataColumnParent为空。找出问题所在的提示是谷歌搜索您收到的错误消息并阅读文档。

文档指出:

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

如果您查看该类的文档DataRelation并查看它的构造函数详细信息,它会说条件ArgumentNullException是:

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

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

换句话说,以下一行或两行正在返回null

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

所以你应该弄清楚为什么。正如其他用户所提到的,您可能拼错了表格或列名。


调试

在这种情况下找出问题的最佳方法是调试代码。假设你是一个完全的新手,这里是如何:

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

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

在此处输入图像描述

还有LocalsWatch窗口也可以帮助查看变量的内容。

在此处输入图像描述

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

最后,这里有一些关于调试的好资源。

祝你好运!

于 2018-07-09T18:42:14.233 回答