C# 当我尝试连接2个数据表时,对象引用未设置为对象的实例
我正在尝试加入2C# 当我尝试连接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
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
vstypeCode
?有些没有匹配的值,你确定吗?DataRow.Item
属性的文档说明,当访问一个不存在的列时,它应该抛出一个ArgumentException
,而不是他得到的NullReferenceException
。我刚刚发布了答案。看来我们得出了相同的结论:)@Clement,这可能是个问题。GetParentRow
方法返回null
,因为没有相关行。只需检查null
,如果不存在相关行,则继续。没有什么可以合并的。谢谢,伙计,我想我在这件事上弄糊涂了。在检查空值后,它真正起作用了。@Clement,我很高兴能为您提供帮助!