2016-10-04 3 views
0

私は2つのファイルを持っています。変数を取得する必要があります。私はそれらが定義され満たされているファイルでグローバルとして設定します。しかし、2番目のファイルで変数を読み込むと空になります。どうすればこの問題を解決できますか?最初のファイルからのコード:変数C#UWP

public sealed partial class NewOrder : Page 
{ 
    public string Name1; 
    public string Mob; 
    public string Adres; 
    public string Email; 
    public string telephone; 


    public NewOrder() 
    { 
     searchButton.Click += async delegate 
{ 
     telephone = searchtext.Text; 

     using (MySqlConnection connection = new MySqlConnection("....")) 
     { 
      connection.Open(); 
      MySqlCommand createCommand = new MySqlCommand(
       "SELECT * FROM customers WHERE mob LIKE N'" + telephone + "'", connection); 

      EncodingProvider ppp; 
      ppp = CodePagesEncodingProvider.Instance; 
      System.Text.Encoding.RegisterProvider(ppp); 
      MySqlDataReader reader = createCommand.ExecuteReader(); 

      if (reader.HasRows) 
      { 
       while (reader.Read()) 
       { 
        Name1 = reader.GetString(1); 
        Mob = reader.GetString(2); 
        Adres = reader.GetString(3); 
        Email = reader.GetString(4); 
       } 
      } 
     } 
    } 
} 
} 

第二のファイルからのコード:

public sealed partial class Details : Page 
{   
    public Details() 
    { 
     this.InitializeComponent(); 

     NewOrder A = new NewOrder(); 
     name.Text = A.Name1; 
     tel.Text = A.Mob; 
     adres.Text = A.Adres; 
     email.Text = A.Email;      
    }     
} 

私が見たものこと。
例外はここにある:name.Text = A.Name1;

型「System.ArgumentNullException」の例外が mscorlib.ni.dllで発生したが、ユーザーコードで

追加情報を扱っていなかった:値がnullにすることはできません。デシベルを読み取るために別の方法を使用していない、コンストラクタであなたのユニット変数を初期化していない、コンストラクタでSQLを読んで、悪い形で割り当てるほか

+0

Name1 = reader.GetString(1)にブレークポイントを設定します。 Name1の値を調べます。 – mattinsalto

+0

私はあなたのクエリが行を返さないことを期待しています。 searchTextに入力したものは、実際にはテーブルcustomerの行にmobの値と一致する行があることを確認してください(またはワイルドカードを複数行使用する場合)。 – rene

+0

[NullReferenceExceptionとは何か、それを修正する方法は?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) ) – rene

答えて

0

これであなたのコードを置き換え、

public string Name1 = string.Empty; 
    public string Mob = string.Empty; 
    public string Adres = string.Empty; 
    public string Email = string.Empty; 
    public string telephone = string.Empty; 
+0

の唯一の理由と思われます。これは症状の修正ですが、根本的な原因ではないかと疑います – rene

+0

しかし、私はそれが 'System.ArgumentNullException'オブジェクトに値を初期化することを避けるために良い方法だと思う。 someobj = new MyClass()のように、変数またはクラスのオブジェクトにデフォルト値を与えます。 –

+0

クエリがレコードを返さない可能性があります。問合せが行を戻さない場合、初期化はNULLを回避してデフォルト値を戻します。したがって、私の場合、レコードが見つからないとします。 name.Text = A.Name1; name.Text = string.Emptyのようなものになります。 したがって、nameコントロールのtextプロパティはnullでなくなります。 –

0

ましたどういうわけか、読み込みが成功したかどうかをクラスの変数を上書きするリスト(リストでなければなりません)と例外処理のない各行について知ることができます...

理由は読まれていないようです変数をnullにする可能性があります。これがあなたの意図した設計であれば、データを持たないかもしれないし、reader.HasRowsがfalse(データベースを読み込もうとしている間に例外を投げたような)を引き起こしているかもしれないので、nullをチェックするべきです。

if (A.Name1 != null) 
{ 
    name.Text = A.Name1; 
}