2013-03-27 91 views
-2

守则停止的实例,在此行中:是什么意思对象引用不设置到对象

pLast = pDataSet.Tables["Patients"].Rows[0]["LastName"].ToString(); 

的错误是:

NULLReferenceExecption Was unhandled 
Object reference not set to an instance of an object. 

这是什么意思?

public void GetPatientInfo(string pID) 
{ 
    DataSet pDataSet = new DataSet(); 
    pDataSet = FindData (pID); 

    pLast = pDataSet.Tables["Patients"].Rows[0]["LastName"].ToString(); 
    pFirst = pDataSet.Tables["Patients"].Rows[0]["FirstName"].ToString(); 
    pAddress = pDataSet.Tables["Patients"].Rows[0]["Address"].ToString(); 
    pCity = pDataSet.Tables["Patients"].Rows[0]["City"].ToString(); 
    pProv = pDataSet.Tables["Patients"].Rows[0]["Province"].ToString(); 
    pPost = pDataSet.Tables["Patients"].Rows[0]["PostalCode"].ToString(); 
} 
+0

这是重复的。有帖子遍布堆栈溢出,回答你的问题。 – sircapsalot 2013-03-27 01:26:00

+0

http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net – 2013-03-27 01:26:11

回答

2

在这样的操作链,这可能意味着以下任一操作:

  • pDataSet是空
  • 表的表名称为空
  • 行是空的对于其中一个表
  • 其中一行缺少指定列或
  • 其中一列中的值为空

最后一个选项是最有可能的一个。要看到,如果是这样的话,替换所有的ToString此呼吁:

pPost = ""+pDataSet.Tables["Patients"].Rows[0]["PostalCode"]; 
0

我会认为,在这种情况下,下标操作符是指一个不存在的DataRowCollection的标,我指的是DataRowCollection由pDataSet.Tables [“Patients”]引用。行不存在,所以试图访问它的属性意味着你试图访问一个不存在的事物的属性。它也可以是列本身,或者 - 因为它是第一个失败的下标 - 整个表格可能为空。在这种情况一个好主意是给每个呼叫到一个单独的对象分解成一个单独的任务,所以不是:

pLast = pDataSet.Tables["Patients"].Rows[0]["LastName"].ToString(); 

你会使用:

pTable = pDataSet.Tables["Patients"]; 
pRow = pTable[0]; 
pColumn = pRow["LastName"] 
pLast = pColumn.ToString(); 

然后你能够在每次分配时检查一个空值并提前失败。

相关问题