Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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# 当我尝试连接2个数据表时,对象引用未设置为对象的实例_C#_Asp.net_Asp.net 3.5 - Fatal编程技术网

C# 当我尝试连接2个数据表时,对象引用未设置为对象的实例

C# 当我尝试连接2个数据表时,对象引用未设置为对象的实例,c#,asp.net,asp.net-3.5,C#,Asp.net,Asp.net 3.5,我正在尝试加入2DataTables,但出现以下错误: Object reference not set to an instance of an object 这就是我正在做的: DataTable NodeDataTable = new DataTable(); DataTable sdosDataTable = new DataTable(); private DataTable NodedataTable() { XmlTextReader xmlreader

我正在尝试加入2
DataTables
,但出现以下错误:

Object reference not set to an instance of an object 
这就是我正在做的:

DataTable NodeDataTable = new DataTable();
DataTable sdosDataTable = new DataTable();
private DataTable NodedataTable()
    {
        XmlTextReader xmlreader = new XmlTextReader(Server.MapPath("stuff.xml"));
        DataSet ds = new DataSet();
        ds.ReadXml(xmlreader);
        xmlreader.Close();
        if (ds.Tables.Count != 0)
        {
            NodeDataTable = ds.Tables[22];
        }
        return NodeDataTable;
    }
    private DataTable SdosDataTable()
    {
        XmlTextReader xmlreader = new XmlTextReader(Server.MapPath("stuff.xml"));
        DataSet ds = new DataSet();
        ds.ReadXml(xmlreader);
        xmlreader.Close();
        if (ds.Tables.Count != 0)
        {
            sdosDataTable = ds.Tables[10];
        }
        return sdosDataTable;
    }
并连接两个数据表:

private void JoinNodeSdosDT()
    {
        DataColumn obj_NodeID, obj_SdosID;
        DataSet ds1 = new DataSet();    
        NodeDataTable = NodeDataTable.Copy();
        sdosDataTable = sdosDataTable.Copy();
        ds1.Tables.Add(NodeDataTable);
        ds1.Tables.Add(sdosDataTable);
        obj_NodeID = ds1.Tables["node"].Columns["node_Id"];
        obj_SdosID = ds1.Tables["sdos"].Columns["node_Id"];    
        sdosDataTable.Columns.Add("typeCodee");           
        DataRelation obj_NodeandSdosRelation = new DataRelation("dept_reln", obj_NodeID, obj_SdosID);
        ds1.Relations.Add(obj_NodeandSdosRelation); 
        foreach (DataRow dr_NodeSods in ds1.Tables["sdos"].Rows)
        {
            DataRow dr_NondeeeR = dr_NodeSods.GetParentRow("dept_reln");
            dr_NodeSods["typeCodee"] = dr_NondeeeR["typeCode"];
        }
        DataTable dtResult = ds1.Tables["sdos"].DefaultView.ToTable(false, "node_Id", "typeCode", "sdos_Id");
        GridView1.DataSource = dtResult;           
    }
有一些匹配的ID,我可以在这里做什么来解决我的问题


我删除了数据表图像,但没有使用它们。

看起来像是
dr_NondeeeR
null

DataRow dr_NondeeeR = dr_NodeSods.GetParentRow("dept_reln");
dr_NodeSods["typeCodee"] = dr_NondeeeR["typeCode"];
因为无论出于何种原因,
GetParentRow
都会返回
null

作为状态文档,因此访问不存在的列应该会给出一个
ArgumentException
。您得到的是一个
NullReferenceException
。如果这真的发生在你说的话里,那么我只能假设

DataRow dr_NondeeeR = dr_NodeSods.GetParentRow("dept_reln");

提供空引用。

哪一行引发异常?dr_NodeSods[“typeCodee”]=dr_NondeeeR[“typeCode”];请张贴完整的堆栈跟踪。。编辑:检查dr_NondeeeR[“typeCode”]是否有值。这不是拼写错误,是吗?它真的是
typeCodee
vs
typeCode
?有些没有匹配的值,你确定吗?
DataRow.Item
属性的文档说明,当访问一个不存在的列时,它应该抛出一个
ArgumentException
,而不是他得到的
NullReferenceException
。我刚刚发布了答案。看来我们得出了相同的结论:)@Clement,这可能是个问题。
GetParentRow
方法返回
null
,因为没有相关行。只需检查
null
,如果不存在相关行,则继续。没有什么可以合并的。谢谢,伙计,我想我在这件事上弄糊涂了。在检查空值后,它真正起作用了。@Clement,我很高兴能为您提供帮助!