2016-10-28 95 views
1

我目前正在處理涉及C#中的註冊/登錄表單的項目。我正在使用平面文件(XML)來存儲註冊信息,並在C#中使用Xml.Linq來完成此操作。從xml文件檢查細節以驗證C#中的登錄詳細信息

我目前遇到了我的登錄驗證代碼問題,因爲我現在已停止工作,因爲我將註冊碼更改爲linq版本。我得到的錯誤代碼是...

「在WaiterApp.exe中發生未處理的'System.NullReferenceException'類型異常其他信息:未將對象引用設置爲對象實例。」

如果有人可以幫我解決這個問題,我已經包含了我的代碼,因爲我是一個C#新手,我試圖調試爲什麼會發生這種情況,但沒有運氣。謝謝:)

註冊代碼...

XElement xml = new XElement("RegisterInfo", 
     new XElement("User", 
     new XElement("Data1", nameTextBox.Text), 
     new XElement("Data2", emailTextBox.Text), 
     new XElement("Data3", passwordTextBox.Text), 
     new XElement("Data4", confirmPasswordTextBox.Text) 
     ) 
     ); 
     xml.Save("data.xml"); 
     this.Hide(); 
     Login ss = new Login(); 
     ss.Show(); 

登入碼

XmlDocument doc = new XmlDocument(); 
     doc.Load("data.xml"); //This code will load the Data xml document with the Login details. 
     foreach (XmlNode node in doc.SelectNodes("//RegisterInfo")) 
     { 
      String Username = node.SelectSingleNode("Data1").Value; 
      String Password = node.SelectSingleNode("Data3").Value; 

      if (Username == nameTextBox.Text && Password == passwordTextBox.Text) 
      { 
       MessageBox.Show("You have logged in!"); 
       this.Hide(); 
       Main ss = new Main(); 
       ss.Show(); 
      } 
      else 
      { 
       MessageBox.Show("Error Logging you in!"); 
      } 

XML腳本

<?xml version="1.0" encoding="utf-8"?> 
<RegisterInfo> 
<User> 
<Data1>Charlie</Data1> 
<Data2>[email protected]</Data2> 
<Data3>1</Data3> 
<Data4>1</Data4> 
</User> 
</RegisterInfo> 
+1

的可能的複製[?什麼是一個NullReferenceException,以及如何修復它(HTTP:// stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) –

回答

1

您fotgot在你的路徑來指定用戶單元(你的代號):

doc.Load("data.xml"); 

    foreach (XmlNode node in doc.SelectNodes("//RegisterInfo")) 
    { 
     //default xpath will be /RegisterInfo/Data1 and will not find the (Data Element) in (RegisterInfo) 
     String Username = node.SelectSingleNode("Data1").InnerTex; // so this will be null 
     String Password = node.SelectSingleNode("Data3").InnerTex; // so this will be null 

     // can't compare null, so null error will be thrown. 
     if (Username == nameTextBox.Text && Password == passwordTextBox.Text) 
     { 
     } 
    } 

你應該做的是指定用戶的元素:

doc.Load("data.xml"); 
    foreach (XmlNode node in doc.SelectNodes("/RegisterInfo/User")) //xpath to /RegisterInfo/User 
    { 
     String Username = node.SelectSingleNode("Data1").InnerTex; // get value of Data1 Value. 
     String Password = node.SelectSingleNode("Data3").InnerTex; // get value of Data3 Value. 
    } 
+0

嗨,謝謝你的回覆。這已經擺脫了錯誤,但現在它保持登錄失敗的消息不斷彈出,即使憑據是正確的。任何理由爲什麼? –

+0

嘗試使用node.SelectSingleNode(「Data1」)。InnerTex;而不是價值。這將得到元素的密文 –

+0

謝謝,這工作。你是明星 –