2010-12-12 3 views
0

とXMLファイルを保存しながら、私はまさに私が間違っているのは何本のラインでUserRoot.Element("User_ID").Value = User.User_ID.ToString();とNullReferenceExceptionのLINQ

をとNullReferenceExceptionを取得しておきますか?

ここでは、コードの大半は、私はプレーンテキストでユーザ名とパスワードを保存すると、信じられないほど安全ではありませんが、これは一つだけのプロセスによってアクセスされようとしていることを知っている方法のため

  if (File.Exists(Path2UserDB + User.User_ID.ToString() + ".db") == false) 
      { 
       File.Create(Path2UserDB + User.User_ID.ToString() + ".db"); 

      } 
      XElement UserRoot = new XElement("User"); 
      UserRoot.Element("User_ID").Value = User.User_ID.ToString(); 
      UserRoot.Element("Full_Name").Value = User.Full_Name; 
      UserRoot.Element("Gender").Value = User.Gender; 
      UserRoot.Element("BirthDate").Value = User.BirthDate.ToString(); 
      UserRoot.Element("PersonType").Value = User.PersonType.ToString(); 
      UserRoot.Element("Username").Value = User.Username; 
      UserRoot.Element("Password").Value = User.Password; 
      UserRoot.Element("Email_adddress").Value = User.Email_Address; 
      XDocument UserDoc = new XDocument(); 
      UserDoc.Save(Path2UserDB + User.User_ID.ToString() + ".db"); 

おかげ

です私は最終的に強力なセキュリティを実装することになります

答えて

2

Element("User_ID")方法は、<User_ID>名前既存要素を返します。

XML要素は空のため、nullを返します。

あなたはこのようなあなたのXMLを作成する必要があります。

var userDoc = new XDocument(
    new XElement("User", 
     new XElement("User_ID", User.User_ID), 
     new XElement("Full_Name", User.Full_Name), 
     new XElement("Gender", User.Gender), 
     ... 
    ) 
); 

また、既存の要素にノードを追加するAdd methodを呼び出すことができます。

0

メソッドを実行する前に、値がnullか空であるかどうかを確認する必要があります。もしあれば

if(!String.IsnullorEmpty(User.User_ID)) 
     UserRoot.Element("User_ID").Value = User.User_ID.ToString(); 
+0

「UserRoot.Element( "User_ID")は 'User.User_ID 'ではなく' null'です – digEmAll

+0

Gotcha、よく彼はそれもチェックしてください –

2

値を設定するUserRootの下にUser_IDというXML要素がないため、このエラーが発生しています。あなたがそれをコメントアウトすると、次の行で同じエラーが発生し、他のすべての要素に対しても同様にエラーが発生します。あなたがしたいツリーを作成するには、これを試してみてください。

XElement UserRoot = 
    new XElement("User", 
     new XElement("User_ID", User.User_ID.ToString()), 
     new XElement("Full_Name", User.Full_Name), 
     new XElement("Gender", User.Gender), 
     new XElement("BirthDate", User.BirthDate.ToString()), 
     new XElement("PersonType", User.PersonType.ToString()), 
     new XElement("Username", User.Username), 
     new XElement("Password", User.Password), 
     new XElement("Email_adddress", User.Email_Address) 
    ); 

XML Tree Creation with XElementで、次のMSDNのリンクは助けになるでしょう。

+0

あなたと上記の男の両方が正しいです、私もし私ができるならチェックボックスを両方とも入れます –

+0

@Indebi問題はありません。ソリューションを投稿する頃には、Slaksがすでに正しいコードを含むように答えを更新していたことに気づいたので、チェックマークを取得する必要があります。私はそれがすべてあなたのために働いて満足しています:) –

関連する問題