2016-10-04 36 views
0

我有兩個文件。需要從一個變量到另一個變量。我將它們設置爲全局文件,並在文件中進行定義和填充。但在第二個文件讀取變量時,它們是空的。我怎麼解決這個問題?從第一個文件中的代碼:變量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但在用戶代碼中沒有處理

其他信息:值不能爲空。

+0

將一個斷點放入Name1 = reader.GetString(1);並檢查Name1的值。 – mattinsalto

+0

我希望你的查詢不要返回行。您確定無論您在searchText中鍵入的是否在表格客戶中有一行匹配mob中的值(或者如果您使用通配符多行)。 – rene

+0

可能的重複[什麼是NullReferenceException,以及如何解決它?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-doi-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; 所以名稱控制的文本屬性將爲空白無null。 –

0

除了配發不好的形式,閱讀SQL在構造函數中,不進行初始化你單位的變量在構造函數中,不使用單獨的方法來讀取數據庫,其以某種方式讓你知道,如果讀取成功,對於集合中的每一行,你將覆蓋你的類變量(應該是一個列表),並且沒有異常處理...

原因似乎是你沒讀過任何東西數據放入你的變量中,這樣他們就有可能變爲null。如果這是您的預期設計,那麼您應該進行空值檢查,因爲您可能沒有數據或其他問題導致reader.HasRows爲假(就像您嘗試讀取數據庫時拋出異常一樣)。

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