变量C#UWP

问题描述:

我有两个文件。需要从一个变量到另一个变量。我将它们设置为全局文件,并在文件中进行定义和填充。但在第二个文件读取变量时,它们是空的。我怎么解决这个问题?从第一个文件中的代码:变量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

替换这个代码,

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。 –

除了配发不好的形式,阅读SQL在构造函数中,不进行初始化你单位的变量在构造函数中,不使用单独的方法来读取数据库,其以某种方式让你知道,如果读取成功,对于集合中的每一行,你将覆盖你的类变量(应该是一个列表),并且没有异常处理...

原因似乎是你没读过任何东西数据放入你的变量中,这样他们就有可能变为null。如果这是您的预期设计,那么您应该进行空值检查,因为您可能没有数据或其他问题导致reader.HasRows为假(就像您尝试读取数据库时抛出异常一样)。

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